#'S ;STOP FLAG STA QTFLAG JMP PRNT01 ;PRINT LINE ; MOVM07 CLC TYA ADC Z86 ;LINE TOO LONG ? BCS MOVM09 ;YES - JUST PRINT ; CMP #$FC ;TOO LONG ? BCS MOVM09 ;YES - >250 ; MOVM08 LDA Z86 ;SET PLUS/MINUS BPL MOVM02 ;NO BORROW ; DEC Z86+1 ;HI BYTE NEG ;NO ; DEY STY Z05 ;YES - SAVE LINE POSITION STY ZB5 LDA Z46 ;A CHANGE ? BEQ PRNT01 ;NO - PRINT IT ; JSR SETP01 ;SET BOTH INDEXS LDA Z30+1 ;CALC DIFF OF STRINGS SEC SBC Z2E+1 STA Z86 BEQ MOVM04 ;STRINGS = NO MOVE ; ;--- MOVE MEMORY FOR CHANGE - E ; Z21 = Z2A END OF BASIC ; SETP01 LDA Z5C STA Z1F LDA Z5C+1 STA Z1F+1 LDA Z2A STA Z21 LDA Z2A+1 STA Z21+1 RTS ; ; ;--- COMPARE Z1F AND Z21 --- ; CMPZ01 LDA Z1F CMP Z21 BNE CMPZ02 LDA Z1F+1 CMP Z21+1 CMPZ02 RTS ;= IF SAME ; ; ;--- MOVE MEMOR ND050 ;(=JMP) ; FIND01 JSR BASC01 ;TEST IF IN BASIC STA Z05 ;SAVE DELIMITER LDX #$00 ;FLAG FOR FIND STX Z46 FND050 JSR GSTR01 ;READ STRING JSR PARM00 ;GET RANGE PARAM BCS FIND06 ;ALWAYS ; FIND05 JSR LINE00 ;NEXT LINE..YR=0 FIND06 STY Z52 ;LINE POSITE ; PRNT06 LDX #QUOMSG-MES00 LDY #LNGMSG-QUOMSG ;IMBEDDED '"' PRNT07 JMP PMESS ; ; ;--- GET FIND/CHANGE STRINGS --- ; GSTR01 LDY Z77 ;START OF STRING INY STY Z2E,X ;BEGIN OF STRING PTR LDA #$00 STA QTFLAG ;CLR QUOTE FLAG STA Z2E+1,X ;ZERO LENGTH GSHAR STA (Z5C),Y INC Z2A ;EOB+1 BNE ADD11 INC Z2A+1 ADD11 JSR PRNT00 ;PRINT LINE ADD13 LDA (Z5C),Y ;EOL SEARCH BEQ ADD04 ;EOL---EXIT INY BNE ADD13 ;ALWAYS..WAIT EOL ; ; ;--- CHANGE AND FIND CMDS --- ;SYNTAX: ;FC/STR1/STR2/,RANGE ; ;FI/STR1/RFFD2 ;EOL-RET CPY #76 ;>74 CHAR ? BCS PRNT18 ;YES...ERROR ; LDA Z80+1 ;ANY '"' ERRORS ? BNE PRNT16 ;YES BEQ PRNT11 ;NO...OK ; PRNT18 JSR PRNT05 ;LONG LINE JMP PRNT17 ;TEST IF STOP ; PRNT16 JSR PRNT06 ;IMBEDDED QUOTE PRNT17 LDA QTFLAG CMP #'S' ;STLWAYS ; ADD09 STY ZB5 ;POSITION BIT Z46 ;ADD FLAG ? BMI ADD10 ;YES...INSTALL IT ; CPY #76 ;>74 CHAR ? BCS ADD11 ;YES...PRINT LINE ; LDA Z80+1 ;IMBEDDED QUOTE ? BNE ADD11 ;YES...PRINT LINE BEQ ADD04 ;NO...NEXT LINE ; ADD10 STY Z05 ;START REF STY Z;PRINT LINE JMP FIND06 ; ; ;--- PRINT FIND/CHANGE LINES --- ; PRNT00 LDX Z40 ;HEX-LINE # LDA Z40+1 JSR RDCD9 ;PRINT DEC LINE # LDY #$00 STY Z80+1 ;CLR IMB QUOTE ERROR LDA #$20 ;SPACE PRNT02 JSR RFFD2 ;OUTPUT CHR INY ; PRNT03 LDA (Z5C),Y ;EOL ? BEZB5 ;TO REF PTR STA (Z21),Y JSR CMPZ01 ;DONE ? BNE MOVU02 ;NO RTS ; MOVU02 LDA Z21 ;Z1F=Z1F-1 BNE MOVU03 DEC Z21+1 MOVU03 DEC Z21 JMP MOVU01 ; ; ;--- TOGGLE SCREEN CASE --- ;SYNTAX : ;CS ; CASE01 LDA RE84C EOR #$02 ;VIA CASE BIT STA RE84C JMP R MOVM02 CLC ADC Z05 ;CALC MOVE TO PTR STA ZB5 BCS MOVM03 ;A MOVE DOWN ; JSR MOVU01 ;MOVE UP BEQ MOVM04 ;BRANCH ALWAYS ; MOVM03 JSR MOVD01 MOVM04 LDA ZB5 ;OLD STR BEGIN SEC SBC Z30+1 TAY INY LDA Z30+1 ;NEW STRING EMPTY ? BEQ MOVM06 ;YES...SKIP -- ; LDY #$00 MOVM01 INY ;LINE LEN LDA (Z5C),Y ;END OF LINE BNE MOVM01 ;NO ; LDA Z86 BPL MOVM07 ;ADD ; CLC TYA ADC Z86 CMP #$02 ;< 1 CHAR BCS MOVM08 ;NO...OK ; MOVM09 LDX #ENDMSG-MES00 LDY #ALTMSG-ENDMSG JSR PMESS ;CAN'T ALTER NEXT LINE LDA  Y DOWN --- ; MOVD01 LDY Z05 INY LDA (Z1F),Y LDY ZB5 INY STA (Z1F),Y JSR CMPZ01 ;DONE ? BNE MOVD02 ;NO RTS ; MOVD02 INC Z1F ;Z1F=Z1F+1 BNE MOVD01 INC Z1F+1 BNE MOVD01 ; ; ;--- MOVE MEMORY UP --- ; MOVU01 LDY Z05 ;FROM REF PTR LDA (Z21),Y LDY ION FIND07 INC Z52 LDY Z52 LDX Z2E ;START OF COMPARE STRING LDA Z2E+1 ;SET CMP CTR STA Z86+1 ;HI FIND08 LDA (Z5C),Y ;END OF LINE ? BEQ FIND05 ;YES...NEW LINE ; CMP Z200,X ;MATCH ? BNE FIND07 ;NO.. ; INX INY DEC Z86+1 ;MATCHED ALL ? BNE FIND08 TR02 LDA Z200,Y ;END BEQ GSTR04 ;YES - GET OUT ; CMP Z05 ;NO - DELIMITER ? BEQ GSTR03 ;YES ; INC Z2E+1,X ;INC STRING LENGTH INY BNE GSTR02 ; GSTR03 STY Z77 ;FIX TEXT PTR RTS ; GSTR04 JMP RNGE03 ; ;--- SET Z1F AND Z21 --- ; ; Z1F = Z5C START OF MOV,RANGE ; "/" IS DELIMITER ;-DISPLAY FOUND LINES ;-OOPS ON CHANGE IN BASIC MODE ; CHNG01 JSR BASC01 ;TEST IF IN BASIC STA Z05 ;SAVE DELIMITER LDX #$00 STX Z30 ;ZERO 2ND STRING PTR JSR GSTR01 ;READ OLD STRING LDX #$02 STX Z46 ;SET CHANGE FLAG BNE FOP ? BNE PRNT11 ;NO ; PRNT04 LDA #$0D JSR RFFD2 ;'RET' JMP DLET04 ;WARM START EXIT ; PRNT11 JSR PAUSE0 ;PAUSE TEST BEQ PRNT04 ;BREAK ; LDY ZB5 ;CONTINUE ON RTS ;NORMAL EXIT ; PRNT05 LDX #LNGMSG-MES00 LDY #SAVMSG-LNGMSG BNE PRNT07 ;ALWAYS-LONG LINB5 INC ZB5 ;END REF DEY ADD12 INY ;SCAN TO EOL LDA (Z5C),Y BNE ADD12 ;NOT EOL ; CPY #251 ;LINE TOO LONG ? BCC ADD14 ;NO..OK JMP MOVM09 ;YES..TOO LONG ; ADD14 JSR SETP01 ;SET POINTERS JSR MOVU01 ;MOVE UP 1 SPACE LDY Z05 ;ADD PTR LDA Z46+1 ;ADD CQ PRNT13 ;YES ; CMP #'"' ;TEST FOR IMBED'D QUOTE BNE PRNT02 ;NO ; CPY #02 BCC PRNT02 ;1ST CHAR-OK ; INY LDA (Z5C),Y ;EOL ? BEQ PRNT14 ;YES ; INC Z80+1 ;IMBEDDED QUOTE PRNT14 DEY LDA #$22 ;RESTORE QUOTE BNE PRNT02 ;ALWAYS ; PRNT13 LDA #$0D JSR ! C392X ;WARM START & EXIT ; ; ;--- UN-NEW MEMORY --- ;RELINKS 00 00 00 AT START OF BASIC ;SYNTAX : ;UN ;'ERROR' MESSAGE IF NOTHING TO LINK ; UNNEW1 LDY #$00 LDA (Z28),Y ;SOB BNE UNNEW5 ;NOT NEW ; INY LDA (Z28),Y BNE UNNEW5 ;NOT NEW ; LDY #$04 ;1ST ; STA ZB6 ;NEW STR CTR LDX Z30 ;INDEX TO NEW STRING MOVM05 LDA Z200,X ;GET NEW STR STA (Z5C),Y INX INY DEC ZB6 ;DONE BNE MOVM05 ; MOVM06 CLC LDA Z2A ;CALC NEW END OF MEMORY ADC Z86 STA Z2A LDA Z2A+1 ADC Z86+1 ;HI STA Z2A+1 PRNT01 JSR PRNT00  (Z5C),Y STA Z5C ;INCLUDE TO LINE # STX Z5C+1 DLET02 LDA Z21 ;CHECK FROM (Z5C),Y ; C=0 Z11 < (Z5C),Y ; CMPN01 JSR NXTCHR ;GET LIN 100 ; RNGE01 BEQ RNGE03 ;ERROR ; RNGE02 BCC RNGE04 ;NUMBER OK BEQ RNGE04 ;END OF COMMAND ; CMP #'- BEQ RNGE04 ;BR IF CHR IS '-' ; RNGE03 JMP RCE03 ;SYNTAX ERROR ; RNGE04 JSR RC873 ;GET LINE# LDA Z11 ;SAVE LINE # (R1) STA Z40 LDA Z11+1 STA Z40+1 XT LINE ADD07 INY CPY #$01 ;1ST CHAR OF LINE ? BNE ADD08 ;NO....CONTINUE ; LDA #$00 ;CLEAR ERROR FLAGS STA Z80+1 ;CLEAR '"' FLAG BIT Z46 ;QT CMD ? BVC ADD08 ;NO... ; LDA QTFLAG ;ERRORS ONLY MODE? CMP #'S' BEQ ADD07 ;YES...SKIP 1ST CHAR ; LDA (Z #$00 DLET03 LDA (Z5C),Y ;MOVE DOWN STA (Z21),Y INY BNE DLET03 ; INC Z5C+1 INC Z21+1 LDA Z2A+1 ;DONE ONE EXTRA PAGE CMP Z21+1 BCS DLET03 ;NO ; DLET04 JSR RC442 ;FIX CHAINING LDA Z1F ;Z2A = Z1F + 02 LDX Z1F+1 CLC ADC #$02 STA Z2A BCC DLE N LINES HAVING IMBEDDED QUOTE ;-OOPS IF IN BASIC MODE ; ADD01 JSR BASC01 ;TEST IF IN BASIC STA Z46+1 ;ADD CHAR LDA #$80 ;ADD FLAG STA QTFLAG ;CLR FLAG ADD02 STA Z46 ;ADD/QUOTE-FLAG JSR PARM00 ;GET RANGE PARAM BCS ADD07 ;ALWAYS ; ADD04 JSR LINE00 ;NE--- DELETE IN RANGE --- ;SYNTAX : ;DE RANGE ; DLET01 JSR RNGE01 ;GET RANGE LDA Z5C ;SAVE IT LDX Z5C+1 STA Z21 STX Z21+1 JSR RC52C ;FIND IT BCC DLET02 ;SKIP IF NOT FOUND ; LDY #$01 LDA (Z5C),Y ;AT END OF SOURCE ? BEQ DLET02 ;YES ; TAX DEY LDA  BNE NMBR04 ;ALWAYS NEXT LINE ; ; ;--- INSERT QUOTE --- ;SYNTAX: ;QT,RANGE ;-DISPLAY LINES WHICH ARE MODIFIED ;-STOP ON LINES HAVING IMBEDDED QUOTE ;-OOPS IF IN BASIC MODE ; QUOT01 STA QTFLAG ;TEST IF STOP FLAG CMP #'S' BNE QUOT02 ;NO... ; JSR Z70 ;NC Z77+1 ; OLDZ76 LDA Z200 ;GET CHARACTER CMP #$3A ;':' EOL OR > ? BCS OLDZ87 ;YES ; CMP #$20 ;SPACE BEQ OLDZ70 ;YES...SKIP IT ; OLDZ81 SEC ;TEST FOR 'A-Z' SBC #$30 SEC SBC #$D0 OLDZ87 RTS ;(Z87) EN20 ;END OF MOVE TABLE ; ; ;--- AUTO LINE # --- ;SMP RCE03 ;SYNTAX ERROR ; NMBR03 JSR AUTL02 ;INSTALL INCR VAL JSR Z76 ;REGET NS BEQ RNTST2 ;USE DEFAULTS ; JSR RCDF8 ;VERIFY COMMA JSR RC873 ;NS LDA Z11 STA ZDA LDA Z11+1 STA ZDA+1 JSR Z76 BEQ RNTST2 ; JSR RCDF8 ;VERIFY COMMA RNTST2 JSR RNGE02 WOR KILL00-1 .WOR MODET1-1 .WOR QUOT01-1 .WOR NMBR01-1 .WOR UNNEW1-1 .WOR MENU01-1 .WOR ENT01-1 ;RESERVE U1 .WOR ENT02-1 ;RESERVE U2 .WOR ENT03-1 ;RESERVE U3 ; ;--- WEDGE TABLE (8 BYTES) --- ;--- STORED IN Z70 THRU Z87 --- ; TABL01 JMP ENTRY1 ;WE # STA Z40 JSR NXTCHR STA Z40+1 CMPN02 LDA Z11 CMP Z40 LDA Z11+1 SBC Z40+1 RTS ;CARRY USED BY CALL ROUTINE ; ; ;--- RENUMBER --- ;SYNTAX : ;RN INC,NS,RANGE ; INC=INCR LINE VAL ; NS=NEW START LINE NUMBER ;RANGE=ORIG RANGE OF LINE #'S ; NMBR01 J JSR RC52C ;FIND OR SET PTRS JSR Z76 ;GET CURR CHR FROM BUFF BEQ RNGE05 ;BR IF END OF CMD ; CMP #'- ;A DASH ? BNE RNGE03 ;NO...SYNTAX ERROR ; JSR Z70 ;YES - SKIP DASH JSR RC873 ;GET END NUMBER RNGE05 LDA Z11 ORA Z11+1 ;ANY END NUMBER ? BNE RNGE065C),Y ;1ST CHAR CMP #$22 ;'"' ? BEQ ADD07 ;YES...SKIP IT BNE ADD10 ;INSERT '"' ; ADD08 LDA (Z5C),Y BEQ ADD09 ;EOL ; CMP #'"' ;QUOTE CHAR ? BNE ADD07 ;NO...OK ; INY LDA (Z5C),Y ;LAST CHAR ? BEQ ADD09 ;YES..OK ; INC Z80+1 ;'"' ERROR BNE ADD07 ;AT05 INX DLET05 STX Z2A+1 DLET06 JSR RC572 ;COLD START PTRS JMP RC392 ;WARM START & EXIT ; ; ;--- INPUT RANGE PARAMETERS --- ;-RANGE OPTIONS ; ,100-200 = LINES 100 THRU 200 ; ,100- = LINE 100 TO END ; ,-200 = START TO LINE 200 ; ,100 = LINE LDX #14 JSR SETIN1 ;SET ID & GET CHAR STA Z86+1 OKTEST LDY Z96 BEQ DPARS4 ;OK-ST=0 ; ;-- PRINT ST, CLOSE CH & EXIT -- ; STEXIT JSR HEXOST ;'ST=$'XX JSR RFFCC ;DEFAULT I/O LDA ZD2 ;FILE # JSR RF2AE ;CLOSE 14 ECEXIT JSR DCERR0 ;READ ERR CH JMP MODE STA ZDA ;FILENAME ADDR LDA Z2A+1 STA ZDA+1 AUTOFF LDA #$00 STA Z82 STA Z82+1 DPARS4 RTS ; ;--- CHECK ERROR CH --- ; EROKT0 JSR RFFCC ;DEFAULT I/O JSR DCERR0 ;READ ERR CH EROKT1 CLC LDA Z5F ADC Z5F+1 CMP #$60 BEQ DPARS4 ;OK EXIT BNE STEXIT ;ER ;07.15.84 _@0:DFH.ED.COM-S2 ; ;--- COMMON PET/C64 PART 2 --- ; ;--- PRINT MESSAGE --- ; PMESS LDA MES00,X JSR RFFD2 ;PRINT IT INX ;CHAR POSITION DEY ;CHAR COUNT BNE PMESS ;NEXT CHAR RTS ; ; ;--- MESSAGE LIST --- MES00 QUOMSG .BYT $12,' IMBEDDED QUOT RFFD2 JSR DCERR0 ;READ ERR CH LDA ZD2 ;14 JSR RF2AE ;CLOSE 14 JMP STEXIT ;PRINT ST & EXIT ; ; ;--- PARSE DISK FILENAME --- ; DPARS1 LDY #$FF DPARS2 INY STY ZD1 ;LEN LDA (Z77),Y STA (Z2A),Y BEQ DPARS5 ;EOL ; CMP #',' ;ANY RANGE PARAM BNE DPARS2OPS! ' TXTMSG .BYT $12,' TEXT MODE ',$0D BASMSG .BYT $12,' BASIC MODE ',$0D APPMSG .BYT $0D,'APPENDING ' HEXMSG .BYT ' *=$' ENDMSG .BYT $12,' CAN',$27,'T ALTER NEXT LINE ',$0D ALTMSG TMPDVN .BYT $FF ;BOOT DEV # QTFLAG .BYT $FF ;QUOTE STOP FLAG ; ;--- COD1 DIR002 JSR INCHAR ;GET DISK CHAR DEC ZD1 BNE DIR002 ;DISREGARD MORE ; JSR OUTRES ;OUTPUT TO CMD DEV LDX Z86 LDA Z86+1 JSR RDCD9 ;HEX-DEC PRINT LDA #$20 JSR OUTCHR DIR003 JSR INCHAR ;GET DISK CHAR CMP #$00 ;EOL ? BNE DIR005 ;NO ; JSR OUTRES  ';D',$C5 ;DELETE .BYT ';E',$C4 ;ERASE DOWN .BYT ';E',$D5 ;ERASE UP .BYT ';F',$C3 ;FIND & CHANGE .BYT ';F',$C9 ;FIND .BYT ';M',$C2 ;BASIC .BYT ';M',$CB ;KILL EDITOR .BYT ';M',$D4 ;TEXT EDITOR .BYT ';Q',$D4 ;INSERT QUOTE .BYT ';R',$CE ;RENUMBER S FLAG DISCM1 CMP #'$' ;DIRECTORY BEQ DIRCMD ;YES ; CMP #'#' ;CHANGE DEV # ? BNE DISCM2 ;NO... ; JMP SETDVN ;CHANGE DISK DEV # ; DISCM2 JSR DISC00 ;DISK COMMAND JMP RC392X ;WARM START ; ; ;--- DISK DIRECTORY --- ; DIRCMD LDA #'I' ;INITIALIZE CMD LD INPUT CHANNEL -- ; SETIN0 LDX ZD2 ;LOGICAL FILE SETIN1 JSR RFFC6 ;SET INPUT DEV JMP RFFCF ;GET 1ST CHAR ; ; .FIL DFH.ED.COM-S2 HEX ;PRINT HEX VAL LDA #$20 ;PRINT SPACE JMP RFFD2 ; ; ;-- PRINT TO CMD DEV -- ; OUTCHR JSR RFFD2 ;PRINT CHAR JSR RFFCC ;MS OR TEXT',$0D .BYT $20,' APPEND PROGRAMS OR TEXT',$0D .BYT $20,' VERIFY PROGRAMS OR TEXT',$0D .BYT $20,' LOAD/RUN BASIC PRG',$0D .BYT $20,' SAVE PROGRAMS OR TEXT',$0D .BYT 'ADD TRAILING CHARACTER',$0D .BYT 'AUTO LINE NUMBER',$0D .BYT 'CHANGE SCRD1 ;DISPLAY MODE AND EXIT ; ; ;-- PRINT 'ST=$XX' -- ; HEXOST LDX #STMSG-MES00 LDY #SEQWRI-STMSG JSR PMESS LDA Z96 ;ST JSR DISHEX ;PRINT HEX VAL LDA #$20 ;PRINT SPACE JMP RFFD2 ; ; ;-- PRINT TO CMD DEV -- ; OUTCHR JSR RFFD2 ;PRINT CHAR JSR RFFCC ;ROR EXIT ; ;--- RESTORE OUTPUT CMD DEV --- ; OUTRES JSR RFFCC ;DEFAULT I/O LDX ZBA ;OLD CMD DEV CPX #$03 BEQ DPARS4 ;SCREEN EXIT ; LDX ZBB ;CMD FILE# JMP RFFC9 ;SET OUTPUT DEV ; ; ;--- GET DISK CHAR --- ; INCHAR LDA Z86+1 ;SAVE LAST 2 CHAR STA Z86 E ',$0D,$0D LNGMSG .BYT $12,' DATA >74 CHAR ',$0D,$0D SAVMSG .BYT 'SAVING ' POSMSG .BYT $12,' DISK DEV #' STMSG .BYT ' ST=$' SEQWRI .BYT ',S,W' ACTMSG .BYT $93,$12,' DFH EDITOR ',$92,$0D,$00 KILMSG .BYT $12,' DFH EDITOR KILLED ',$92,$0D ; OOPMSG .BYT ' O ;NO ; INY LDA (Z77),Y DPARS5 STA Z80 ;REL FLAG LDA #$00 ; ST=0 STA Z96 ; ST=0 TAX ;XR=0 LDY ZD1 ;LEN DPARS3 LDA SEQWRI,X ;ADD',S,W' STA (Z2A),Y INY INX CPX #$04 BNE DPARS3 ;NOT DONE ; LDA TMPDVN ;DEFAULT DEV # STA ZD4 LDA Z2A ;FILENAME PTRMMAND LIST --- ; TABL02 .BYT 'RU',$CE ;RUN CLST01 .BYT $BE ;'>' .BYT $AF ;'/' LOAD .BYT $A6 ;'&' APPEND .BYT $DD ;']' VERIFY .BYT $DE ;'^' LOAD/RUN .BYT $DF ;'_' SAVE OR PUT .BYT ';A',$C4 ;ADD .BYT ';A',$D5 ;AUTO .BYT ';C',$D3 ;CASE CHANGE .BYT;DIRECT CMD DEV LDA #$0D ;'RET' JSR OUTCHR LDY #$04 ;SKIP NEXT 4 CHAR BNE DIR001 ;ALWAYS ; DIR005 JSR OUTRES ;DIRECT CMD DEV LDA Z86+1 JSR OUTCHR ;PRINT DISK CHAR JSR PAUSE0 ;STOP OR PAUSE BNE DIR003 ;PAUSE...NEXT LINE ; DISBRK LDA #$0D ;RET JSR .BYT ';U',$CE ;UN-NEW .BYT $BB ;EDITOR MENU .BYT $00,$00,$00 ;RESERVE-U1 .BYT $00,$00,$00 ;RESERVE-U2 .BYT $00,$00,$00 ;RESERVE-U3 .BYT $00 ;END OF TABLE ; ;--- MENU DESCRIPTION LIST --- ; CLST02 .BYT $20,' DISK COMMANDS',$0D .BYT $20,' LOAD PROGRAY #$00 STA (Z77),Y LDA ZD2 ;FILE # STA ZBB LDA ZB0 ;CMD DEV # STA ZBA JSR DISC00 ;INITIALIZE DR JSR EROKT1 ;VERIFY OK LDA #'$ LDY #$00 STA (Z77),Y JSR DPARS1 ;PARSE FILENAME LDA #$60 ;SEC ADDR=0 JSR OPEN01 ;OPEN 14,8,0 LDY #$06 DIR001 STY ZERT LEADING QUOTE',$0D .BYT 'RENUMBER TEXT LINES',$0D .BYT 'UN-NEW (CANCEL NEW CMD)',$0D .BYT $20,' DISPLAY DFH EDITOR MENU',$0D .BYT '-U1--RESERVED-----',$0D .BYT '-U2--RESERVED-----',$0D .BYT '-U3--RESERVED-----',$0D ; ; ;--- COMMAND ADDRESS LISTEEN CASE',$0D .BYT 'DELETE LINES',$0D .BYT 'ERASE SCREEN DOWN',$0D .BYT 'ERASE SCREEN UP',$0D .BYT 'FIND & CHANGE STRINGS',$0D .BYT 'FIND STRINGS',$0D .BYT 'SET BASIC MODE',$0D .BYT 'KILL DFH EDITOR',$0D .BYT 'SET TEXT EDITOR MODE',$0D .BYT 'INSDEFAULT I/O JMP RF183 ;UNLISTEN ; ; ;--- OPEN SEQ FILE --- ; OPEN00 INC ZD1 ;',S' INC ZD1 ; ;--- OPEN PRG FILE --- ; OPEN01 STA ZD3 ;SEC ADDR IN AR LDA #14 STA ZD2 ;LOG FILE # LDA TMPDVN ;DEFAULT DEV # STA ZD4 JMP RF524 ;OPEN DISK CH ; ; ;-- SET A CHR GETF07 CMP #$0D ;END OF A LINE ? BEQ GETF04 ;YES... ; JSR SAV001 ;LOAD OR VERIFY BCS GETF06 ;OK ; LDA ZD2 ;FILE # JSR RF2AE ;CLOSE FILE JMP DISOP7 ;VERIFY ERROR ; GETF06 LDA Z96 ;STATUS OK ? BNE GETF05 ;NO... BEQ GETF03 ;YES...(=JMP) ; GETF T) ; GETF01 JSR PRSE08 ;PARSE JSR SETIN0 ;GET 1ST CHAR STA Z80+1 ;1ST CHAR LDA Z96 ;ST= 0 ? BEQ GETF11 ;YES...OPEN OK ; JMP DISBRK ;ERROR ; GETF11 LDA ZB3 CMP #'&' ;APPEND ? BNE GETF12 ;NO ; LDX #APPMSG-MES00 LDY #HEXMSG-APPMSG JSR PMESS ;'APPE ;--- LOAD AR FROM Z5C --- ; NXTCHR JSR Z5CINC ;INC FIRST LDY #$00 LDA (Z5C),Y RTS ; ; ;--- COPY EOB INTO Z5C --- ; COPT01 LDA Z2A STA Z5C LDA Z2A+1 STA Z5C+1 JSR Z5CDEC JMP Z5CDEC ;Z5C=Z2A-2 ; ;--- TEST MORE PARAMETERS --- ; PARM00 JSR Z70 ;MORE OFF JSR IRQALL ;ALL KEYS REPEAT JMP DISDVN ;DISPLAY DEV#, MODE & EXIT ; ; IRQ000 .BYT $00 ;LAST KEY DEPRESSED IRQ001 .BYT $10 ;TIMER 1 IRQ002 .BYT $10 ;TIMER 2 ; ;--- INSTALL ALL KEYS REPEAT IRQ --- ; IRQALL LDA #$10 STA IRQ001 ;TIMER 1 STA IRQ002 ;AVE AR AT Z5C --- ; SAV004 JSR SAV002 ;STORE 4 TIMES SAV002 JSR SAV001 ;STORE 2 TIMES SAV001 SEC ;STORE ONCE LDY Z9D ;VERIFY OR LOAD ? BEQ SAV000 ;LOAD ; CMP #$00 ;SKIP LINKS? BEQ Z5CINC ;YES-EXIT CMP #$01 BEQ Z5CINC ;YES-EXIT ; LDY #$00 CMP (Z5CTMSG ;NO OF CHAR JSR PMESS ;'ACTVATION MESSAGE LDX #$00 STX Z80 ;CMD POS LDA #CLST02 STA Z82 ;MSG POS STX Z82+1 MENU02 LDX Z80 LDA CLST01,X BEQ MENU03 ;END OF LIST ; PHA AND #$7F ;STRIP MSB JSR RFFD2 INC Z80 ;TEMP PLA BPL MENAVE LINE ; ; ;-- PARSE LOAD/VERIFY/APPEND TEXT CMD -- ; PRSE08 JSR Z70 ;PARSE COMMAND CMP #$00 ;EOL ONLY BEQ PRSE09 ;EOL ; CMP #',' ;DELIMITER ? BNE PRSE08 ;NO ': ,' OR EOL BEQ PRSE20 ;ERROR ; PRSE09 LDA ZB3 CMP #'&' ;APPEND ? BNE PRSE11 ;NO ; JSENTRY -- ; KILLPG LDA Z77 ;SAVE CHRGET PTR STA ZB5 ;TEMP LDA Z77+1 STA ZAD JSR KILL01 ;KILL LDA ZB5 ;RESTORE CHRGET PTR STA Z77 LDA ZAD STA Z77+1 RTS ; ;--- GENERAL KILL ROUTINE --- ; KILL01 LDX #EN20-OLDZ70 ;RESTORE CHRGET ROUTINE KILL02 LDA OLMBER RANGE (OPT) ; PUTF01 JSR PRSE02 ;PARSE JSR EROKT0 ;CHECK ERR CH LDX ZD2 ;FILE # JSR RFFC9 ;SET OUTPUT DEVICE JMP PUTF03 ;START OUTPUT ; PUTF02 LDA #$0D ;CR FOR EOL JSR RFFD2 ;OUTPUT CHR JSR Z5CINC ;SKIP LO LINK PUTF03 JSR NXTCHR ;GET HI LINK TCHR ;END OF BASIC BEQ PARM05 ;YES - DONE ; JSR CMPN01 ;CHECK LINE RANGE BCC PARM05 ;DONE RTS ; PARM05 PLA ;BACKUP 1-JSR PLA JSR AUTOFF ;TURN OFF AUTO STA ZB3 ;NOT A '^' JMP DISOP8 ;FIX CHAIN EXIT ; ; ;--- PAUSE DISPLAY TEST --- ; PAUSE0 JSR RF304 LDA #$00 ;END OF LINE JSR SAV001 ;SAVE LDA Z96 ;EOI - ALL DONE ? BEQ GETF02 ;NO ; GETF05 TYA JSR SAV002 ;MAKE ZERO LINK JSR HEXOST ;DISPLAY ST LDA Z5C ;NEW END OF BASIC STA Z2A LDA Z5C+1 STA Z2A+1 LDA ZD2 ;FILE # JSR RF2AE ;CLOSE CURRENT FINDING' JMP GETF13 ; GETF12 JSR RF42E ;L OR V MESSAGE GETF13 LDA #$01 ;JUNK FOR LINKS JSR SAV004 ;FAKE LINKS AND LINE# LDA Z80+1 ;1ST CHAR JMP GETF07 ;SAVE IT ; GETF02 LDA #$01 ;JUNK FOR LINKS JSR SAV004 ;FAKE LINKS AND LINE# GETF03 JSR RFFCF ;INPUT  STUFF (RANGE) BEQ PARM02 ;NO JSR RCDF8 ;VERIFY COMMA NEXT ; PARM02 JSR RNGE02 ;GET RANGE LDA #$0D ;'RET' JSR RFFD2 ;PRINT BNE PARM04 ;BRANCH ALWAYS ; LINE00 INY TYA CLC ADC Z5C ;CALC PTR TO NEXT LINE STA Z5C BCC PARM04 INC Z5C+1 PARM04 JSR NXTIMER 2 SEI LDX #IRQVEC STX Z90+1 CLI RTS ; ; ;--- LOAD (APPEND) TEXT FILES --- ; ;SYNTAX: /D:FILENAME ; &D:FILENAME ; ; /=LOAD &=APPEND ; D : DISK DRIVE# (OPT) ; N1: BEGIN INPUTTING AT LINE N1 (OP),Y ;VERIFY OK ? BEQ Z5CINC ;YES-EXIT ; CLC ;ERROR BCC Z5CINC ;UPDATE MEMPTR ; SAV000 LDY #$00 STA (Z5C),Y Z5CINC INC Z5C ;Z5C=Z5C+1 BNE COMX00 INC Z5C+1 COMX00 RTS ;C=1 IF OK ; Z5CDEC LDA Z5C ;Z5C=Z5C-1 BNE Z5CD01 DEC Z5C+1 Z5CD01 DEC Z5C RTS ;U02 ;NOT END OF CMD ; LDA #$20 ;'SPACE' JSR RFFD2 JSR RFFD2 MENU04 LDY #$00 LDA (Z82),Y ;DESCRIPTION JSR RFFD2 INC Z82 ;UPDATE MSG PTR BNE MENU06 INC Z82+1 MENU06 CMP #$0D ;EOL ? BNE MENU04 ;NO... BEQ MENU02 ;NEXT LINE ; MENU03 JSR AUTOFF ;AUTOR COPT01 ;Z5C=Z2A-1 JMP PRSE12 ;OPEN FILE ; PRSE20 JMP RCE03 ;SYNTAX ERROR ; PRSE11 JSR Z76 ;REGET CHAR JSR RC873 ;GET START LINE# JSR RC52C ;FIND LINE (Z5C) PRSE12 LDA #$6E ;SEC ADDR 14 JSR OPEN00 ;OPEN SEQ FILE JMP RF40A ;SEARCH MESSAGE ; ; ;--- SDZ70-1,X ;ORIG CHRGET STA Z70-1,X DEX BNE KILL02 ;NOT DONE ; LDA #$F3 ;EDITOR NOT ACTIVE FLAG STA TESBYT JMP IRQNRM ;RESTORE NORMAL IRQ ; ; ;--- DISPLAY EDITOR MENU --- ; ;SYNTAX : ; OR ;XX ; MENU01 LDX #ACTMSG-MES00 ;START POSITION LDY #KILMSG-ACBEQ PUTF04 ;DONE...EOB ; LDX #$00 ;NO... JSR CMPN01 ;DONE LINE RANGE ? BCS PUTF06 ;NO... ; PUTF04 LDA ZD2 ;FILE # JSR RF2AE ;CLOSE CURRENT FILE JMP DISOP8 ;FIX LINK EXIT ; PUTF05 JSR RFFD2 ;OUTPUT IT PUTF06 JSR NXTCHR BEQ PUTF02 ;EOL BNE PUTF05 ;S01 ;STOP KEY ? BEQ CTRL03 ;YES...EXIT ; JSR RFFE4 ;GET A CHAR CMP #$20 ;SPACE ? BNE CTRL03 ;NO... ; CTRL02 JSR RFFE4 ;WAIT FOR CHAR BEQ CTRL02 ;NULL CTRL03 RTS ; ; ;--- DOS COMMANDS --- ; DISCMD BNE DISCM1 ;READ ERROR CH ; JSR SUPR00 ;TOGGLE SUPRESLE JSR RFFCC ;DEFAULT I/O LDA ZB3 CMP #']' ;VERIFY ? BEQ GETF08 ;YES ; JMP NMBR01 ;RENUMBER FILE ; GETF08 JMP DISOP8 ;FIX LINKS ; ; ;--- SAVE TEXT FILE ---- ; ;SYNTAX : _@D:FILENAME,RANGE ; ; @D : REPLACE DISK DRIVE# (ONLY @ IS OPT) ;RANGE: LINE NU 0 TEST CPY #$42 ;BASIC 4.0 ? BNE FIX401 ;NO...RTS LDY ZTSR ;LEN OF STRING BEQ FIX401 ;NULL---NO FIX REQ'D LDA ZTSR+1 ;IS STRING IN BASIC ? CMP RSOV LDA ZTSR+2 SBC RSOV+1 BCC FIX401 ;YES---NO FIX REQ'D LDA ZTRA+1 ;PTR IN VAR AREA STA (ZTSR+1),Y -- ;XR = POSITION AR=HEX VALUE ; SMFX00 STA ZTLB ;HEX COUNT SMFX01 LDA ZTLB ;MODIFIED HEX COUNT BEQ SMFX03 ;DONE DEC ZTLB ;COUNT-1 INC PARMES,X LDA PARMES,X CMP #$3A ;COUNT > 9 ? BNE SMFX01 ;NO...NEXT COUNT LDA #$30 ;COUNT BIT = 0 STA PARMES,X  L00 ;>> YES--CLEAR CURS BMI SPOL04 ;TURN OFF RVS JSR RFFCC ; RESTORE DEFAULT I/O RTS ; ;--- SIMULATED BASIC INSTRUCTION --- ; PARMES .BYT 'FA$(000)',$B2,$CA .BYT '(FA$(0),000,000)',$00 ; ;--- REVISION DATE --- ; .BYT '03-29-84' ; ;--- WORKING VARIABL N LDA ZTCB JSR SMFX00 ;START POSITION LDX #$18 ;LINE POSITION LDA ZTCA JSR SMFX00 ;LEN OF STRING LDA #PARMES ;STRING ADDR-HI STA ZBAS1+1,Y JSR SWPZ00 ;SWAP ZERO PAGE SEC LDAET INPUT DEVICE SPOL01 JSR RFFE4 ;GET A CHAR TAY ;SAVE IT ; LDX STCHK ;0=C64 6=PET LDA $90,X ;ST BNE SPOL04 ;ERR OR LAST CHAR IN RECORD ; CPY #$0D ; CR ? BEQ SPOL02 ;>> YES-EOL ; INC CHCNT ;>> INCR CHAR COUNT BNE SPOL01 ;>> INC CHCNT+1 ;>> JMP  LDX #$04 JSR SIMB01 LDX #$12 JSR SIMB01 LDX #$16 JSR SIMB01 LDX #$00 ;PUT NAME IN SIMB LINE BEQ SIMB02 ;(JMP) ; SIMB01 STA PARMES,X INX STA PARMES,X INX STA PARMES,X RTS ; SIMB02 LDA ZTFA STA PARMES,X LDA ZTFA+1 AND #$7F BNE SIMB03 ;NOTR ;STRING LENGTH DEY ;POINT TO STRING END WPCN04 LDA (ZTKR),Y ;STRING CHR CMP #$80 ;CHR > 127 ? BCC WPCN05 ;NO-- AND #$7F STA (ZTKR),Y JMP WPCN07 ; WPCN05 CPX ZTFD ;LOWER CASE ? BEQ WPCN06 ;NO-- AND #$3F WPCN06 STA (ZTKR),Y WPCN07 CPY #$00 ;END OT NON-NULL FIELD STA ZTRB ;FT% PART05 INC ZTIR ;NEXT FIELD CLC LDA ZTCA ;LEN ADC ZTFO ;1 IF IN STRING (0 IF NOT) ADC ZTCB STA ZTCB ;NEW START POS LDA #$00 STA ZTCA ;NEW LEN INY ;NEXT V(1) ELEMENT CPY ZTSR ;LEN OF V(1) BCS PART06 ;CONVERSION CONSTR REM65 LDX #$04 ;FILE NOT FOUND JMP (RER64) ;ERROR ROUTINE ; ;--- WORDPRO STRING CONVERSION --- ; WPCN00 LDX #'W ;WC$ (CASE) LDY #$C3 JSR GETV00 ;FIND WC$ BCS WPCN01 ;--NOT FOUND LDA ZTJR ;NULL STRING ? BEQ WPCN01 ;YES-- LDY #$00 LDA (ZTKR),YJSAGE EMSG1 *=*+3 ;ERROR MESSAGE EXCMD *=*+3 ;SIMBASIC COMMAND .PAGE .END FAULT I/O RTS ; ;--- SIMULATED BASIC INSTRUCTION --- ; PARMES .BYT 'FA$(000)',$B2,$CA .BYT '(FA$(0),000,000)',$00 ; ;--- REVISION DATE --- ; .BYT '03-29-84' ; ;--- WORKING VARIABL ;END OF STRING REF INY LDA ZTRA+2 STA (ZTSR+1),Y FIX401 RTS ; ; JTBL00 JMP REM04 ;4.0 ERROR MES 0 JMP REM14 ;4.0 ERROR MES 1 JMP REX40 ;4.0 EXECUTE ; JMP REM03 ;3.0 ERROR MES 0 JMP REM13 ;3.0 ERROR MES 1 JMP REX30 ;3.0 EXECUTE ; JMP REM64 ;C64 DEX INC PARMES,X LDA PARMES,X CMP #$3A ;COUNT > 99 ? BNE SMFX02 ;NO...NEXT COUNT LDA #$30 ,COUNT BIT = 0 STA PARMES,X DEX INC PARMES,X INX SMFX02 INX BNE SMFX01 ;ALWAYS SMFX03 RTS ; ;--- FIX BASIC 4.0 STRING REF --- ; FIX400 LDY ROMCK ;BASIC 4. ES --- ; RLFI *=*+1 ;LOGICAL FILE # RSOV *=*+2 ;START OF VAR RSOA *=*+2 ;START OF ARRAYS REOA *=*+2 ;END OF ARRAYS RBAS *=*+2 ;CHRGET PTR STCHK *=*+1 ;ST OFFSET 6=PET,0=64 YTEMP *=*+1 ;C64 ->3 (3&4->0) TZBUF *=*+33 ;TEMP 33 BYTE ZP EMSG0 *=*+3 ;ERROR MES PARMES ;1ST LINE CHAR JSR EXCMD ;EXECUTE SIMBASIC CMD JSR SWPZ00 ;SWAP ZERO PAGE LDY YTEMP LDA RBAS ;RESTORE BASIC POINTERS STA ZBAS1,Y ;>> LDA RBAS+1 ;>> STA ZBAS1+1,Y ;>> LDX ZTLN ;RESTORE X,Y LDY ZTRB+1 ;>> RTS ; ;--- UPDATE SIMBASIC LINE -SPOL01 ;>> ; SPOL02 JSR TOGL00 ;>> YES--TOGGLE CURS INC SLCNT ;INCR LINE COUNT BNE SPOL03 ;>> INC SLCNT+1 ;>> ; SPOL03 LDA SLCNT ;END COUNT ? CMP ELCNT ;>> BNE SPOL01 ;>> NO LDA SLCNT+1 ;>> MAYBE-- CMP ELCNT+1 ;>> BNE SPOL01 ;>> NO SPOL04 JSR TOG A NULL LDA #$20 ;SPACE SIMB03 INX STA PARMES,X CPX #$01 ;NAME IN BOTH PLACES ? BNE SIMB04 YES... LDX #$0B ;SECOND NAME ENTRY BNE SIMB02 ;(JMP) ; SIMB04 LDX #$06 ;LINE POSITION LDA ZTIR ;STRING ELEMENT JSR SMFX00 ;FA$(IR) LDX #$14 ;LINE POSITIOF STRING ? BNE WPCN08 ;NO-- JMP SWPZ00 ;YES--EXIT ; WPCN08 DEY ;NEXT CHR JMP WPCN04 ; ;--- DATA FILE SPOOL-UP --- ; SPOL00 LDA #$00 ;ZERO START COUNT STA SLCNT STA SLCNT+1 STA CHCNT ;CHR COUNT = 0 STA CHCNT+1 LDX RLFI ;LOGICAL FILE# JSR RFFC6 ;SMPLETED DEY JMP PART03 ;GET NEXT CHR ; PART06 LDA #$00 STA ZTRB+1 JSR NCNT09 ;UPDATE FT% JMP SWPZ00 ;SWAP ZP AND EXIT ; ;--- SIMBASIC EXECUTION --- ;FA$(I)=MID$(FA$(0),CB,CA) ; SIMB00 STX ZTLN ;TEMP STY ZTRB+1 ;TEMP LDA #$30 ;CLEAR SIMBASIC VALUES ;GET CASE CHR BNE WPCN02 WPCN01 LDA #$00 ;DEFAULT TO UPPER CASE WPCN02 STA ZTFD ;CASE IND. (0=UC) ; LDX #'W ;WS$ (WORDPRO STRING) LDY #$D3 JSR GETV00 BCC WPCN03 ;FOUND IT LDX #$E9 ;UNDEF'D FUNCTION JMP EMSG0 ;ERROR EXIT ; WPCN03 LDX #$00 LDY ZTJ;07.15.84 _@0:DFH.ED.COM-S1 pttpuwxyy||tyqtyppyq|tyqyyyyyw{ywywxwwuqytpERROR MES 0 JMP REM65 ;C64 ERROR MES 1 JMP REX64 ;C64 EXECUTE ; ; REM64 CPX #$7A BNE REM641 ;NOT DIM'D ARRAY ; LDA #$9F ;$A29F STA Z22 ;C64 ERROR ADDR LDA #$A2 JMP RA445 ;DIM'D ARRAY ERROR ; REM641 LDX #$13 ;UNDEF'D FUNCTION .BYT $2C ;SKIP NEXT I BNE GETV02 ;NO INY LDA (ZTIR),Y CMP ZTLR+1 ;2ND CHAR OK ? BEQ GETV04 ;YES GETV02 CLC ;NEXT VARIABLE LDA ZTIR ADC #$07 STA ZTIR BCC GETV03 INC ZTIR+1 GETV03 LDA ZTIR ;SEARCH COMPLETE ? CMP RSOA LDA ZTIR+1 SBC RSOA+1 BCC GETV01 ;NO RTS ;VAR N DA #$00 ;USE DEFAULT FS% = 0 BEQ FINV07 ;(JMP) ; FINV06 LDY #$03 LDA (ZTIR),Y ;SORT FIELD # FINV07 STA ZTFS ; LDX #$46 ;FIND SORT ORDER IN FO$ LDY #$CF ;>> JSR GETV00 ;>> LDY #$00 LDA (ZTKR),Y CMP #'D ;DESC ORDER ? BEQ FINV08 ;YES-- LDA #$00 ;D IR+1 NCNT08 LDA ZTKR ;TOTAL RECORD CMP ZTIR ;CURRENT RECORD LDA ZTKR+1 SBC ZTIR+1 BCS NCNT01 ;I < K = NOT DONE NCNT09 LDX #$C6 ;FT% LDY #$D4 JSR GETV00 BCS NCNT10 ;NOT DEFINED LDY #$03 ;INSERT COUNT LDA ZTRB STA (ZTIR),Y DEY LDA ZTRB+1 STA ( RAY NAME LDA (ZTKR),Y ;>> STA ZTFA ;>> 1ST CHAR INY ;>> LDA #$00 ;>> IF NO 2ND CHAR DEC ZTJR ;>> LEN-1 BEQ FINV03 ;>> LDA (ZTKR),Y ;>> 2ND CHAR FINV03 ORA #$80 ;>> STRING VAR'BL STA ZTFA+1 ;>> ; LDX #$46 ;FIND DELIM IN FD$ LDY #$C4 ;>> JSR GETORT FIELD NO BEQ NCNT06 ;COUNT NON-NULL LDY #$00 LDX #$01 STY ZTLA ;SORT FIELD LEN NCNT02 LDA ZTFD ;DELIM CMP (ZTSR+1),Y ;CHECK EACH CHAR BNE NCNT03 ;NOT FOUND CPX ZTFS ;SORT FIELD # BEQ NCNT05 ;END OF SORT FIELD INX BNE NCNT04 NCNT03 CPX ZTFS 01 LDA (ZTRA+1),Y STA ZTSR,Y ;LEN,ADDR DEY BPL UPSS01 RTS ; ;--- V(RA) = S --- ; UPRA00 LDY #$02 ;3 ELEM UPRA01 LDA ZTSR,Y ;LEN,ADDR STA (ZTRA+1),Y DEY BPL UPRA01 RTS ; ;--- CA = V(RA) --- ; UPCA00 LDY #$02 UPCA01 LDA (ZTRA+1),Y STA ZTCA,Y ;LEN, N --- ; ELEM00 LDY #$06 LDA (ZTRA+1),Y STA ZTKR ;# OF ELEMENTS DEY LDA (ZTRA+1),Y STA ZTKR+1 ; ;--- V = REF + 4 --- ; LDA ZTRA+1 CLC ADC #$04 STA ZTVR LDA ZTRA+2 ADC #$00 STA ZTVR+1 RTS ; ;--- COUNT NON NULLS SORTED --- ; NCNT00 JSR FINA00 L14 RTS ; ;---- SWAP RA AND RB ---- ; SRAB00 LDA ZTRA PHA LDA ZTRB STA ZTRA PLA STA ZTRB RTS ; ;--- CONVERT V(J) --- ; CONJ00 LDX ZTJR LDY ZTJR+1 JMP CONV00 ; ;--- CONVERT V(I) --- ; CONI00 LDX ZTIR LDY ZTIR+1 ; ;--- RA = V + 3 * CB --- ; CONV002 LDA (ZTIR),Y ADC ZTIR PHA INY LDA (ZTIR),Y ADC ZTIR+1 STA ZTIR+1 PLA STA ZTIR CMP REOA ;SEARCH COMPLETE ? LDA ZTIR+1 SBC REOA+1 BCC FINA01 ;NO ; JSR SWPZ00 ;RESTORE ZP LDY #$24 ;FA$ - FILE NOT FOUND JMP EMSG1 ;ERROR EXIT ; FINA03 LDA ZTTFO ;DELIM SKIP COUNT STA ZTIR STA ZTFS ;SORT FIELD STA ZTCB ;START POSITION JSR CONI00 ;RA=V(1) JSR UPSS00 ;S=V(RA) LDY ZTSR ;LEN OF PARTITION STRING BEQ PART04 ;NULL LDY #$00 PART02 LDA (ZTSR+1),Y ;SCAN V(1) CMP ZTFD ;DELIMITER ? BEQ PART04 ;OT FOUND EXIT: C=1 ; GETV04 INY ;FOUND IT ! LDA (ZTIR),Y STA ZTJR ;LEN INY LDA (ZTIR),Y STA ZTKR ;START ADDRESS LSBY INY LDA (ZTIR),Y STA ZTKR+1 ;START ADDRESS MSBY CLC RTS ;OK EXIT C=0 ; ;--- FIND STRING ARRAY --- ; FINA00 LDA RSOA ;START AT SEFAULT = ASCENDING FINV08 STA ZTFO RTS ; ;--- FIND VARIABLE --- ;IF FOUND C=0; ELSE C=1 ; GETV00 STX ZTLR ;SEARCH VAR NAME STY ZTLR+1 LDA RSOV ;INITIALIZE START STA ZTIR LDA RSOV+1 STA ZTIR+1 GETV01 LDY #$00 LDA (ZTIR),Y CMP ZTLR ;1ST CHAR OK ?  ZTIR),Y NCNT10 RTS ; ;--- PARTITION STRING ELEMENTS --- ; PART00 LDA ZTKR+1 ;IS DIM > 255 ? BEQ PART01 ;NO...OK JMP FINA04 ;DIM'D ARRAY ERROR ; PART01 LDA #$00 STA ZTIR+1 ;MS STA ZTRB ;INITIAL FT% STA ZTCA ;FIELD LEN LDA #$01 ;SEARCH COUNT=1 STA ZV00 ;>> BCC FINV04 ;>> FOUND IT LDA #'* ;USE DEFAULT DELIM BNE FINV05 ;>> (JMP) ; FINV04 LDY #$00 LDA (ZTKR),Y ;ASSIGNED DELIM FINV05 STA ZTFD ;SAVE DELIM ; LDX #$C6 ;FIND SORT FIELD # IN FS% LDY #$D3 ;>> JSR GETV00 ;>> BCC FINV06 ;>> FOUND IT L BNE NCNT04 ;NOT SORT FIELD INC ZTLA NCNT04 INY CPY ZTSR BCC NCNT02 ;NOT END OF STRING NCNT05 LDA ZTLA ;LEN OF LAST FIELD BEQ NCNT07 ;EQUIV TO A NULL NCNT06 INC ZTRB ;UPDATE FT% BNE NCNT07 INC ZTRB+1 NCNT07 INC ZTIR ;NEXT RECORD BNE NCNT08 INC ZTADDR DEY BPL UPCA01 RTS ; ;--- SEARCH BASIC VARIABLES --- ; FINV00 LDX #'F ;FIND ARRAY NAME LDY #$C1 ;IN FA$ JSR GETV00 ;>> BCC FINV02 ;FOUND IT ; JSR SWPZ00 ;RESTORE ZP LDX #$E9 ;UNDEF'D FUNCTION JMP EMSG0 ;ERROR EXIT ; FINV02 LDY #$00 ;SAVE AR;K = TOTAL RECORDS ; LDA #$01 ;INITIALIZE START STA ZTIR LDA #$00 STA ZTIR+1 STA ZTRB ;NON NULL CTR STA ZTRB+1 NCNT01 JSR CONI00 ;V(I) JSR UPSS00 ;S=V(I) JSR FIX400 ;FIX 4.0 STRING REF LDA ZTSR ;LEN OF V(I) BEQ NCNT07 ;BYPASS NULLS LDX ZTFS ;S STX ZTCB+1 ;INDEX STY ZTCB+2 LDA ZTVR STA ZTRA+1 ;V LDA ZTVR+1 STA ZTRA+2 LDX #$03 ;3 * CB CONV01 CLC LDA ZTCB+1 ADC ZTRA+1 STA ZTRA+1 LDA ZTCB+2 ADC ZTRA+2 STA ZTRA+2 DEX BNE CONV01 RTS ; ;--- S = V(RA) --- ; UPSS00 LDY #$02 ;3 ELEM UPSSIR ;SET PTR TO ARRAY START STA ZTRA+1 ;>> LDA ZTIR+1 ;>> STA ZTRA+2 ;>> LDY #$04 ;CHECK # OF DIM'S LDA (ZTRA+1),Y ;>> CMP #$01 ;>> BEQ ELEM00 ;>> 1 = OK ; FINA04 JSR SWPZ00 ;RESTORE ZP LDX #$7A ;DIM'D ARRAY ERROR JMP EMSG0 ;ERROR EXIT ; ;--- K =YES...FIELD IS DONE INC ZCA !LEN PART03 INY ;NEXT V(1) ELEMENT CPY ZTSR ;LEN OF V(1) BCC PART02 ;NOT DONE WITH V(1) STRING DEY LDA #$00 STA ZTFO ;CB UPDATE COOUNT=0 PART04 JSR SIMB00 ;SIM BASIC LDA ZTCA ;LEN BEQ PART05 ;NULL FIELD LDA ZTIR ;LASTART OF STA ZTIR ;ARRAYS LDA RSOA+1 ;>> STA ZTIR+1 ;>> FINA01 LDY #$00 ;FIND ARRAY NAME LDA (ZTIR),Y CMP ZTFA ;1ST CHAR OK ? BNE FINA02 ;NO INY LDA (ZTIR),Y CMP ZTFA+1 ;2ND CHAR OK ? BEQ FINA03 ;YES--FOUND NAME ; FINA02 CLC ;NEXT ARRAY LDY #$0 FSRT50 JSR CONJ00 ;V(J) LDY #$02 ;RB = V(J) FSRT51 LDA (ZTRA+1),Y STA ZTRB,Y DEY BPL FSRT51 ;NOT DONE CLC LDA ZTRA+1 ;RA = V(J+1) ADC #$03 STA ZTRA+1 BCC FSRT52 INC ZTRA+2 FSRT52 JSR UPCA00 ;CA = V(J+1) LDX #$02 FSRT53 LDA ZTRB,X ;CB = V(J) S JSR UPSS00 ;S = V(L) ; ;--- J = L --- ; FSRT30 LDA ZTLR STA ZTJR LDA ZTLR+1 STA ZTJR+1 ; ;--- I = J --- ; FSRT40 LDA ZTJR STA ZTIR LDA ZTJR+1 STA ZTIR+1 ; ;--- J = J + J --- ; CLC ROL ZTJR ROL ZTJR+1 ; ;--- IF J > K THEN FSRT70 --- ;--- IF J = K = FULL RECORD STA ZTLA ;>> LDA ZTCB ;CB LEN = FULL RECORD STA ZTLB ;>> LDX ZTFS ;SORT FIELD = 0 ? BNE CMPR02 ;NO-- JMP CMPL00 ;YES--COMPARE FULL STRINGS ; CMPR02 CMP #$00 ;CB = NULL ? BEQ CMPR04 ;YES-- JSR SWPC00 ;SWAP CA : CB JSR TSTC00 ;LOCATE RB+1),Y STA (ZTRA+1),Y DEY BPL FSRT11 ; ;--- K = K - 1 --- ; LDA ZTKR BNE FSRT12 DEC ZTKR+1 FSRT12 DEC ZTKR ; ;--- IF K > 0 THEN FSRT30 --- ; LDA ZTKR+1 BNE FSRT30 LDA ZTKR BNE FSRT30 ; ;--- V(I) = S --- ; JSR CONI00 ;RA = V(I) JSR UPRA00 ;V(EQ TSTC04 ;YES-- CPX #$01 ;START OF SEL'D FIELD ? BNE TSTC02 ;N0-- ; INY STY ZTLA ;NEW SORT FIELD BNE TSTC03 ;(JMP) ; TSTC02 INY TSTC03 CPY ZTCA ;END OF STRING ? BCC TSTC01 ;NO CPX #$02 ;MORE DELIM ? BCC TSTC04 ;NO STY ZTLA ;MAKE A NULL TSTC04 L--- ; FSRT00 CLC ;K+1 IN A LDA ZTKR+1 ROR A STA ZTLR+1 LDA ZTKR ROR A STA ZTLR INC ZTLR ;L = L + 1 BNE FSRT10 INC ZTLR+1 ; ;--- IF L < > 1 THEN FSRT20 ; FSRT10 LDA ZTLR+1 BNE FSRT20 ;L > 256 LDA ZTLR CMP #$01 BNE FSRT20 ;L <> 1 ; ;--- WIGGLELDX #$03 ;4 ELEMENTS SWPC01 LDA ZTCB,X ;L,SAL,SAH,LS PHA LDA ZTCA,X STA ZTCB,X PLA STA ZTCA,X DEX BPL SWPC01 RTS ; ;--- TEST FIELD OF CA --- ;--- FIND FIELD START ADDR & LENGTH --- ; ;IN: ZTFS =SORT FIELD # ; ZTFD =DELIMITER CHR ; ZTCA LDA ZSOV1,Y ;START/VAR TO COM'N STA RSOV ;>> LDA ZSOV1+1,Y ;>> STA RSOV+1 ;>> ; LDA ZSOA1,Y ;START/AR'YS TO COM'N STA RSOA ;>> LDA ZSOA1+1,Y ;>> STA RSOA+1 ;>> ; LDA ZEOA1,Y ;END/AR'YS TO COM'N STA REOA ;>> LDA ZEOA1+1,Y ;>> STA REOA+1 ;>> ; +1 ;RB = RA STA ZTRB+1 ;>> LDA ZTRA+2 ;>> STA ZTRB+2 ;>> JSR CONJ00 ;V(J) LDY #$02 FSRT81 LDA (ZTRA+1),Y STA (ZTRB+1),Y DEY BPL FSRT81 ;NOT DONE JMP FSRT40 ; ;==== SUBROUTINES ==== ; TOGL00 LDY #$00 ;TOGGLE CURSOR LDA (ZCURC),Y ;CURSOR ADDR EONULL ? BNE CMPL04 ;NO-- ; CPX #$00 ;ASCENDING ? BNE CMPL12 ;NO-- ; LDA ZTLB ;CB = NULL ? BNE CMPL12 ;NO-- CMPL02 RTS ; CMPL04 LDA ZTLB ;CB = NULL ? BEQ CMPL02 ;YES-- ; CPX #$00 ;ASCENDING ? BEQ CMPL06 ;YES-- JSR SRAB00 ;SWAP RA : RB ; CMPL06 LDATA ZTCB,X DEX BPL FSRT53 ;NOT DONE JSR CMPR00 ;COMPARE V(J),V(J+1) LDA ZTRA BNE FSRT60 ; ;--- J = J + 1 --- ; INC ZTJR BNE FSRT60 INC ZTJR+1 ; ;--- IF S < V(J) THEN FSRT80 --- ; FSRT60 JSR CONJ00 ;V(J) JSR UPCA00 ;CA = V(J) LDX #$02 FSRT61 LDA  THEN FSRT60 --- ;--- IF J < K THEN FSRT50 --- ; LDA ZTJR+1 CMP ZTKR+1 BEQ FSRT41 ;MORE TESTS REQ'D BCC FSRT50 ;J < K BCS FSRT42 ; J > K FSRT41 LDA ZTJR CMP ZTKR BEQ FSRT60 ;J = K FSRT42 BCS FSRT70 ;J > K ; ;--- IF V(J+1) < V(J) THEN FSRT60 --- ;  FIELD IN CB JSR SWPC00 ;SWAP CA : CB ; CMPR04 LDA ZTCA ;CA = NULL ? BEQ CMPL00 ;YES-- ; JSR TSTC00 ;LOCATE FIELD IN CA ; ;--- STRING (OR FIELD) COMPARISON TEST --- ; CMPL00 LDY #$01 STY ZTRA DEY STY ZTRB LDX ZTFO ;ASCENDING = 0 ; LDA ZTLA ;CA = I) = S JSR NCNT00 ;DETERMINE FT% FSRT13 JSR TOGL00 BMI FSRT13 ;TURN OFF RVS JMP SWPZ00 ;RETURN TO BASIC ; ;--- L = L - 1 --- ; FSRT20 LDA ZTLR BNE FSRT21 DEC ZTLR+1 FSRT21 DEC ZTLR ; ;--- S = V(L) --- ; LDX ZTLR LDY ZTLR+1 JSR CONV00 ;RA = V(L) DA ZTLA ;UPDATE SORT START ADR CLC ADC ZTCA+1 ;SET TO START OF FIELD STA ZTCA+1 ;>> BCC TSTC05 ;>> INC ZTCA+2 ;>> TSTC05 TYA ;SORT REF SEC SBC ZTLA ;NEW FIELD LENGTH STA ZTLA ;>> RTS ; ;--- COMPARE CA AND CB FIELDS --- ; CMPR00 LDA ZTCA ;CA LEN  CURSOR --- ; JSR TOGL00 ;--- S = V(K) --- ; LDX ZKR LDY ZTKR+1 JSR CONV00 V(K) JSR UPSS00 ;S = V(K) ; ;--- V(K) = V(1) --- ; LDA ZTVR CLC ADC #$03 STA ZTRB+1 LDA ZTVR+1 ADC #$00 STA ZTRB+2 ;RB = V(1) LDY #$02 ;V(K) = V(1) FSRT11 LDA (ZT =STRING LENGTH ; ZTCA+1=STRING START ADDRESS ;OUT: ZTLA =FIELD LENGTH ; ZTCA+1=FIELD START ADDRESS ; TSTC00 LDX ZTFS ;SORT FIELD LDY #$00 STY ZTLA LDA ZTFD TSTC01 CMP (ZTCA+1),Y ;DELIMITER ? BNE TSTC02 ;NO-- ; DEX ;END OF SEL'D FIELD ? B LDA ZBAS1,Y ;CHARGET PTR TO COM'N STA RBAS ;>> LDA ZBAS1+1,Y ;>> STA RBAS+1 ;>> RTS ; ;--- INITIALIZE - BASIC VARIABLES --- ; INIL12 JSR SWPZ00 ;SWAP ZERO PAGE JSR FINV00 ;FIND FA,FD,FS,FO JMP FINA00 ;FIND AND SET UP ARRAY ; ;--- L = INT(K/2) + 1 R #$F6 STA (ZCURC),Y RTS ;'-' AT EXIT IF RVS ON ; ;--- SWAP ZERO PAGE --- ; SWPZ00 LDX #$20 SWPZ01 LDA ZTFA,X ;$03 - $23 PHA ;TO TEMP BUFFER LDA TZBUF,X STA ZTFA,X PLA STA TZBUF,X DEX BPL SWPZ01 ;NOT DONE RTS ; ;--- SWAP CA AND CB --- ; SWPC00  (ZTCA+1),Y ;COMAE CHRS CMP (ZTCB+1),Y ;>> BNE CMPL10 ;NOT EQUAL ; INY CPY ZTLB ;END OF CB ? BCC CMPL08 ;NO-- BCS CMPL12 ;(JMP) ; CMPL08 CPY ZTLA ;END OF CA ? BCC CMPL06 ;NO-- RTS ; CMPL10 BCC CMPL14 ;CA < CB CMPL12 JSR SRAB00 ;SWAP RA : RB CMPZTSR,X ;CB = S STA ZTCB,X DEX BPL FSRT61 JSR CMPR00 ;V(J),S COMPARE LDA ZTRA BEQ FSRT80 ; ;--- V(I) = S :GOTO FSRT10 --- ; FSRT70 JSR CONI00 JSR UPRA00 ;RA = V(I) JMP FSRT10 ; ;--- V(I) = V(J) :GOTO FSRT 40 --- ; FSRT80 JSR CONI00 ;V(I) LDA ZTRA ADDRESS-LSB * ;* V+5 $(1) -MSB * ;* : : * ;* V+3*N $(N) LENGTH * ;* V+1+3*N $(N) ADDRESS-LSB * ;* V+2+3*N $(N) -MSB * ;* * ;******************************** . ON ERROR * ;* (2) FILE NOT FOUND * ;* (3) DIM'D ARRAY ERROR * ;* * ;*-------- ARRAY FORMAT --------* ;* * ;* REF NAME - 1ST CHAR * ;* REF+1 - 2ND CHAR * ;*  0 ;WORDPRO CONVERSION ; ;--- INITIALIZE - ROM TYPE --- ; INIL00 LDA #$20 ;PRINT SPACE FOR C-64 JSR RFFD2 ;>> LDA #$9D ;>> AND CURSOR LEFT JSR RFFD2 ;>> LDA #$00 ;ST OFFSET FOR C-64 STA STCHK ;>> LDX ROMCK ;ROM TEST 3.0=$1B ;4.0=$42, C-64=$48 CPX  TION -- * ;* * ;* FA$ - ARRAY NAME * ;* FD$ - FIELD DELIMITER * ;* FS% - SORT FIELD NUMBER * ;* FO$ - SORT ORDER * ;* FT% - RETURNED STRING COUNT * ;* * ;* * PARTITION ENTRY ** ; STRT30 JMP STRT31 ;** WORDPRO CONVERT ENTRY ** ; STRT40 JSR INIL00 ;** FILE SPOOL-UP ENTRY ** JMP SPOL00 ;START SPOOL-UP ; SLCNT .DBY $0000 ;SPOOL-UP LINE COUNT ELCNT .DBY $0000 ;SPOOL-UP END LINE COUNT CHCNT .DBY $0000 ;SPOOL-UP  * ;*----- FSORT & PARTITION ------* ;* BY: JOHN L. DARLING * ;* ORIGINAL: MAR 03,1981 * ;* REVISED: NOV 14,1983 * ;* * ;*-- WORDPRO CONV., SPOOL-UP ---* ;*-- AND CHARACTER COUNT ---* ;* BY: BLAI2 C-64=$48 REM03 = $C357 ;ERROR MES 0-3.0 REM04 = $B3CF ;ERROR MES 0-4.0 REM13 = $F573 ;ERROR MES 1-3.0 REM14 = $F5BC ;ERROR MES 1-4.0 RER64 = $0300 ;ERROR MES C64 REX30 = $C702 ;EXECUTE-3.0 REX40 = $B787 ;EXECUTE-4.0 REX64 = $A7EF ;EXECUTE-C64 RA445 =  ;* * ;* 3. ROUTINE TO TRANSLATE * ;* STRINGS INTO WORDPRO CHRS. * ;* -- SYS TO ORIGIN+6. * ;* * ;* 4. ROUTINE TO SPOOL-UP THRU * ;* SEQUENTIAL DATA RECORDS. * ;* -- SYS TO ORS) ZTLB = ZTCB+3 ;CB SORT LEN ; ZSOB = $28 ;START OF BASIC ZSOV1 = $2A ;START OF VAR ZSOA1 = $2C ;START OF ARRAYS ZEOA1 = $2E ;END OF ARRAYS ZBAS1 = $77 ;CHRGET POINTER ZSTP = $96 ;ST-PET ZSTC = $90 ;ST-C64 ; ; C64 ADDR = PET ADDR +3 ; FOR ZSOV1 THRU ZBNEXT INSTR INIL04 LDX #18 ;BASIC C64 JMP TABLE LDY #$00 ;BASIC ROM JMP TABLE INIL06 LDA JTBL00,X STA EMSG0,Y INX INY CPY #9 ;DONE ? BNE INIL06 ;NO-- ; LDA #ZCUR1 LDY #ZLFI1 LDX ROMCK CPX #$48 ;C64 ? BNE INIL08 ;NO... LDA #ZCUR2 LDY #ZLFI2 INPAGE ;----- ZERO PAGE USAGE ------ ; * = $0003 ; ZTFA *=*+2 ;ARRAY NAME CHRS ZTFD *=*+1 ;DELIMITER CHR ZTFS *=*+1 ;FIELD SORT # ZTFO *=*+1 ;ORDER (ASC=$00/DESC=$44) ZTIR *=*+2 ;2 BYTE INDEX ZTJR *=*+2 ;2 BYTE INDEX ZTKR *=*+2 ;2 BYTE INDEX ZTLR *=*+2 ;2 REF+2 ARRAY LENGTH-LSB * ;* REF+3 -MSB * ;* REF+4 = V DIMENSION # * ;* REF+5 # OF ELEMENTS-MSB * ;* REF+6 ---- (N) -----LSB * ;* * ;* V+3 $(1) LENGTH * ;* V+4 $(1) #$48 ;C64 ? BEQ INIL04 ;YES... LDA #$06 ;ST OFFSET FOR PET STA STCHK ;>> CPX #$1B ;BASIC 3.0 ? BEQ INIL02 ;YES... ;..NO..ASSUME BASIC 4.0 ; LDX #00 ;BASIC 4.0 JMP TABLE .BYT $2C ;SKIP NEXT INSTR INIL02 LDX #9 ;BASIC 3.0 JMP TABLE .BYT $2C ;SKIP --FOR WORDPRO CONVERT-- * ;* * ;* WS$ - WORDPRO STRING * ;* WC$ - WORDPRO CASE * ;* * ;*------- ERROR MESSAGES -------* ;* * ;* (1) UNDEF'D FUNCTICHAR COUNT ; STRT11 JSR INIL00 ;INITIALIZE JSR INIL12 ;FIND VARIABLES JMP FSRT00 ;START SORT ; STRT21 JSR INIL00 ;INITIALIZE JSR INIL12 ;FIND VARIABLES JMP PART00 ;START PARTITION ; STRT31 JSR INIL00 ;INITIALIZE JSR SWPZ00 ;SWAP ZERO PAGE JMP WPCN0NE D. STANDAGE * ;* MAY 22,1983 * ;* REVISED: FEB 2$A445 ;C64-ERROR ROUTINE RFFD2 = $FFD2 ;PRINT ACCUM RFFC6 = $FFC6 SET INPUT DEV RFFCC = $FFCC ;RESTORE DEFAULT I/O RFFE4 = $FFE4 ;GET A CHAR ; .PAGE * = $7900 ; ;--- FUNCTION ENTRY POINTS --- ; STRT10 JMP STRT11 ;** FSORT ENTRY ** ; STRT20 JMP STRT21 ;*IGIN+9 * ;* >> POKE RECORD COUNT REQUEST * ;* TO ORIGIN+17&18 * ;* >> PEEK ACTUAL RECORD COUNT * ;* AT ORIGIN+15&16 * ;* >> PEEK CHARACTER COUNT * ;* AT ORIG+19&20 * ;* AS1 ; ZCUR1 = $C4 ;CURSOR ADDR 3&4 ZCUR2 = $D1 ;CURSOR ADDR C64 ZCURC = $FB ;COMMON-CURSOR ADDR Z22 = $22 ;C64 ERROR ADDR ; ZLFI1 = $D2 ;LOGICAL FILE# 3&4 ZLFI2 = $B8 ;LOGICAL FILE# C64 .PAGE ;--- BASIC ROM REFERENCES --- ; ROMCK = $FFFE ;3.0=$1B 4.0=$4IL08 STA ZCR D $00,Y STA RLFI ;LOGICAL FILE # ; LDY ZCURC ;$C4 OR $D1 LDA $00,Y ;SAVE CURSOR POSITION STA ZCURC ;>> LDA $01,Y ;>> STA ZCURC+1 ;>> ; LDY #$00 CPX #$48 ;C64 ? BNE INIL10 ;NO... LDY #$03 INIL10 STY YTEMP ;ZP OFFSET 3/4=0,64=3 BYTE INDEX ZTVR *=*+2 ;2 BYTE REF ZTSR *=*+3 ;S (LEN,2 BYTE ADDR) ZTLN *=*+1 ;LENGTH-TEMP ZTRA *=*+3 ;V(X) (LEN,2 BYTE ADDR) ZTRB *=*+3 ;V(Y) (LEN,2 BYTE ADDR) ZTCA *=*+4 ;COMP REG #1:L,ADDR,LS) ZTLA = ZTCA+3 ;CA SORT LEN ZTCB *=*+4 ;COMP REG #2:L,ADDR,L  SAVE "@0:EX.CREATE",8#:Y"-- AN EXAMPLE PROGRAM TO CREATE A TEST DATA --""-- FILE FOR USE BY OTHER EXAMPLE PROGRAMS --":"-- INITIALIZE --"$CR$(13): "-- CARRIAGE RETURN --".QT$(34): "-- QUOTE CHARACTER --"(  SAVE "@0:EX.CONVERT",8$:X"-- AN EXAMPLE PROGRAM USING THE 'CONVERT' --""-- SUBROUTINE CONTAINED IN 'DFH SUBS$79' --":"-- TOP OF MEMORY = $7900 TO PROTECT SUBROUTINES --"$ (65534)72 1080: "-- C64 COMPUTER --"' E --".SC30982: "-- CONVERT ADDRESS $7906 --"uSP$" ": "-- 40 SPACES --"WC$"": "-- UPPER CASE --":"-- OPEN DATA FILE AND WORDPRO FILE --" 8,8,8,"0:TESTFILE,S,R" 8,WS$: "-- DI -- PAD WITH LEFT ARROW & SPACES TO MULTIPLE OF 40 CHARACTERS --"F(LE(WS$)u2AC39LE40(LE39)40(LE79)40(LE119)<"-- PREVIOUS LINE NOT VALID FOR STRING LENGTHS > 159 CHARACTERS --"FWS$WS$(31): "-- ADD LEFT ARROW --" PWS$WS$ "ON DISK.LEFT ARROW & SPACES TO MULTIPLE OF 40 CHARACTERS --"F(LE(WS$)u2AC39LE40(LE39)40(LE79)40(LE119)<"-- PREVIOUS LINE NOT VALID FOR STRING LENGTHS > 159 CHARACTERS --"FWS$WS$(31): "-- ADD LEFT ARROW --" PWS$WS$  SAVE "@0:EX.SPOOL",8":T"-- AN EXAMPLE PROGRAM USING THE 'SPOOL' --""-- SUBROUTINE CONTAINED IN 'DFH SUBS$79' --":"-- TOP OF MEMORY = $7900 TO PROTECT SUBROUTINES --"$ (65534)72 1080: "-- C64 COMPUTER --"#. D POKE TARGET # TO $7911-12 (L,H) --"L: SS30985: "-- SPOOL ADDRESS =$7909j: "TARGET RECORD # ";RN RN1 RN10 1170RP%RN256: SS9,RP% SS8,RNRP%256:"-- OPEN FILE, SPOOL, AND INPUT RECORD --" 5,8,6,"T'Y";KB$2 (KB$,1)"Y" 1170L: SS30985: "-- SPOOL ADDRESS =$7909j: "TARGET RECORD # ";RN RN1 RN10 1170RP%RN256: SS9,RP% SS8,RNRP%256:"-- OPEN FILE, SPOOL, AND INPUT RECORD --" 5,8,6,"T ON FIELD #2 AND DISPLAY RESULTS --"IP "ARRAY#","ASCENDING SORT ON FIELD #2"bZFO$"A": FS%2: SSd JJ0 FT%1: JJ,DA$(JJ) : JJn 1480x:"-- SORT ON FIELD #1 AND DISPLAY RESULTS --" "ARRAY#","DESCENDING SORT ON FIEL28"  "003*MYRON*08-15"- "103*DONNA*11-10"F "004*HOWARD*02-08"]( "104*DEMA*03-21"v2 "005*JOHN D*08-04"< "105*PEGGY*07-12"F:ELIMITER = * --"t 9,QT$;"*_@0:";FO$;CR$;~:"-- READ, PRINT, AND SAVE DATA RECORDS - 8FO$"TESTFILE": "-- OUTPUT FILENAME --".B:VL"-- OPEN THE DISK STORAGE FILE --"sV 9,8,9,"@0:"FO$",S,W"y`:j"-- CREATE FIRST LINE WITH DELIMITER = * --"t 9,QT$;"*_@0:";FO$;CR$;~:"-- READ, PRINT, AND SAVE DATA RECORDS - . 52,0: 53,121: 1110: "-- PET --"L8: 55,0: 56,121: "-- C64 --"RB:}L"-- TEST/INSTALL M.L. SUBROUTINES --"V: (30977)21 (30980)30 1160` " LOADING DFH SUBS$79 "j : "DFH SUBS$79",8,1t:~"-- INITIALIZ SCARD FIRST LINE --", 9,8,9,"@0:WPROFILE,P,W"e 9,(0);(64);: "-- DUMMY 'LOAD ADDRESS'=$4000 --"k:"-- INPUT, PRINT AND CONVERT DATA --": 8,WS$: TTST WS$:  SC: "-- CONVERT WS$ TO WORDPRO CHARACTERS --":8" (SP$,AC): "-- ADD SPACES --"E Z 9,WS$;: "-- SAVE LINE TO WORDPRO FILE --"z dLCLC1: TT0 1270: "-- GET NEXT RECORD --" n: x 8: 9  "";LC;"DATA RECORDS CONVERTED TO WORDPRO"  "FORMAT. WORDPRO FILE 'WPROFILE' SAVED"   "EX.CREATE" PRG  "EX.CONVERT" PRG  "EX.SPOOL" PRG  "ROOF.PET" RG ABLOCKS FREE.  "EX.SORT" PRG  "EX.PARTITION" PRG  "EX.G.PRIN" PRG  52,0: 53,121: 1110: "-- PET --"H8: 55,0 56,121: "-- C64 --"NB:yL"-- EST/INSTALL M.L. SUBROUTINES --"V: (3077)21 (30980)30 1160` " LOADING DFH SUBS$79 "j : "DFH SUBS$7",8,1t:"~"-- INITIALIZE AN ESTFILE,S,R" SS: "-- SPOOL --"0 5,DA$: 56:d"-- PRINT RECORD AND CHARACTER COUNT --"v "";DA$;"" TC (SS10) (SS11)256 "THE FILE CONTAINS";TC;"CHARACTERS" "PRIOR TO THIS RECORD."( "ANOTHER RECORD ;_@0:DFH SUBS-S ;OPT NOLIST .GEN ;******************************** ;* 07-15-84 * ;* DFH SUBS$79 * ;* * ;* FOR: BASIC 3.0, 4.0 & C-64 * ;* * ;* 1. SORTING ROUD #1" FO$"D": FS%1: SS=  JJ0 FT%1: JJ,DA$(JJ) : JJC I :n "--SUBR-- WAIT FOR OPERATOR --" : " PRESS ANY KEY TO CONTINUE " : KB$: KB$"" 1490 : KB$: KB$"" 1500 1480<:F"-- SORT TINE FOR * ;* MULTI-FIELD, SINGLE- * ;* DIMENSION STRING ARRAYS. * ;* -- SYS TO ORIGIN. * ;* * ;* 2. FIELD PARTITIONING ROUTINE* ;* FOR MULTI-FIELD STRINGS * ;* -- SYS TO ORIGIN+3. * -" JJ1 10: DA$: DA$1 9,QT$;DA$;CR$;: JJ@:f"-- CLOSE DISK FILE AND QUIT --"q 9: w:"-- FILE DATA, ID#*NAME*BIRTHDAY "001*TOM*05-26" "101*LA VERDA*09-22" "002*JOHN B*03-24" "102*PAT*04- +e,ȑ+Lƈe`}o &Lؓ0`0 zLah &L &H HhHJJJJ `h) `H hLiii:`I`$0L:)(i` s L x  s x 8` ݓޅz{ ݓυ` s k䗢, &䗩 ͽ ) 퓈ȱ_L j J_-. 䜱_  3 JI  I J  UUU12_Ɗ 퓥Ix j482Bȱ_e &SLޜe祉Ɗe 퓰  84ȥ43_-e-.e. LA  SAVE "@0:EX.F.CONV-1",8%:f"- AN EXAMPLE PROGRAM TO COMBINE GROUPS OF SHORT RECORDS -""- INTO LONGER, MULTI-FIELD RECORDS IN A NEW FILE -":"-INITIALIZE & GET FILENAMES-"$:.QT$(34): "-QUOTE CHARACTER-"8CR$ ---- -U3--RESERVED-----  ’Zl,Ý+L?Llz{: 808` aL k` ͚_`$% ___`$8_%`e--e.._$`%.% 3"#i-. YL -L kCD : DE$(DE$,1)* 9,QT$;DE$;"_@0:";NF$;CR$;0:L"-CONVERSION ROUTINE-"R:e: RC0: RO$"": 8,RI$: TTST: RO$RO$RI$RCRC1: RCFR 1260 9,QT$;RO$;CR$;  TT0 1250 8: 9: "-QUOTE CHARACTER-"8CR$ ;A;A;C;D;E;E;F;F;M;M;M;Q;R;Uλ DISK COMMANDS LOAD PROGRAMS OR TEXT APPEND PROGRAMS OR TEXT VERIFY PROGRAMS OR TEXT LOAD/RUN BASIC PRG SAVE PROGRAMS OR TEXT ADD TRAILING CHARACTER AUTO LINE NUMBER CHANGE SCREEN CASE DELE  SAVE "@0:EX.F.CONV-2",8%:e"- AN EXAMPLE PROGRAM TO SPLIT LONG MULTI-FIELD RECORDS -""- INTO SHORTER RECORDS IN A NEW FILE -":"-GET FILENAMES & OPEN FILES-"$:. "OLD FILENAME ";OF$8 "NEW FILENAME ";NF$B ` j$ #LÞ ILؓIz򓥚 I $z w`  ҖƷ – ͽ  Җ –  –  g LᖠȄz-,ȱzn-䗅-.` gbec` L gL E$  JJ10 SE$(JJ)"0"SE$(JJ)) JJ/:N"-CREATE NEW FIRST LINE-"T:t 9,QT$;DE$;"_@0:";NF$;CR$;z:"-PUT FIELDS IN ARRAY-": : NR1: #8,GT$: "-DISCARD QUOTE-": DA$(NR)"": #8,GT$: TTST( GT$CR  SAVE "@0:EX.SORT",8!:R"-- AN EXAMPLE PROGRAM USING THE 'SORT' --""-- SUBROUTINE CONTAINED IN 'DFH SUBS$79' --":"-- TOP OF MEMORY = $7900 TO PROTECT SUBROUTINES --"$ (65534)72 1080: "-- C64 COMPUTER --"!. 5 L ȱ_"ȱ_愈" L =L% CS L `L&zȔ1嗕2 2z`Lך_"`#-$.%`"$#%` ȱ"ȑ" {`"# $퓑$ {`$%$LILؓ+ȱ+ +Lbe+ CD ͽ ȱ_"ȱ_愈" L =L% CS L `L&zȔ1嗕2 2z`Lך_"`#-$.%`"$#%` ȱ"ȑ" {`"# $퓑$ {`$%$LILؓ+ȱ+ +Lbe+ (13): "-CARRIAGE RETURN-"3B "OLD FILENAME ";OF$NL "NEW FILENAME ";NF$hV "FIELDS/RECORD ";FRn`:j"-OPEN DATA FILES-"t:~ 8,8,8,"0:"OF$",S,R" 9,8,9,"0:"NF$",S,W":"-CREATE NEW FIRST LINE-":  8,DE$  y - s k ` C DCD`  腻 y!L a y k y Ϛ ˕ ne n(e ۍS s "Jz@ J嗅I  $IPS_""_ "ȱ_ӌ$I0 L-  : DA$(20): "-- DATA ARRAY --"JSS3076: "-- SORT ADDRSS $7900 --"kFT%0 "-- RECORD COUN --"FA$"DA" "-- SORT ARRAY NAME --":"-- OPN FILE AND GET DELIMITR --" 3,8,3,"0:TESTFILE,S,R" 3,FD$: FD$(FD$,1) TE LINES ERASE SCREEN DOWN RASE SCREEN P FIND & CHANGE STRINGS FIND STRINGS SET BASIC MOD KILL DFH EDITOR ST TEXT EDITOR MOD INSERT LEADING QUOTE RENMBER TEXT LINES UN-NEW (CANCEL NEW CMD) DISPLAY DFH DITOR MENU -U1--RESERVED----- -U2--RESERVED-  8,8,8,"0:"OF$",S,R"1L ,8,9,"0:"NF$",S,W"7V:[`"-INITIALIZE & GET DELIMITER-"aj:wt SE$(20),DA$(20)~CR$(13): QT$(34): #8,DE$: DE$QT$ 1160: #8,GT$: GT$CR$ 1170 JJ1 20SE$(JJ)((JJ),2)D 8 & H L L淅䗅L L1 ` IMBEDDED QUOTE  DATA >74 CHAR SAVING  DISK DEV # ST=$,S,W DFH EDITOR  DFH EDITOR KILLED OOPS!  TEXT MODE  BASIC MODE APPENDING *=$ CAN'T ALTER NEXT LINE RUξ$ 13902DA$(NR)DA$(NR)GT$0< GT$DE$ 1310DFNRNR1: 1300JP:hZ"-SAVE RECORDS TO DISK-"nd:n: JJ1 NR1x 9,QT$;DA$(1);SE$(JJ);DA$(JJ);CR$; JJ: TT0 1290 8: 9: JJ1 20SE$(JJ)((JJ),2)D 2,0: 53,121: 1110: "-- PET --"F8: 55,0: 56,121: "-- C64 --"LB:wL"-- TEST/INSTALL M.L. SUBROUTINES --"V: (30977)21 (30980)30 1160` " LOADING DFH SUBS$79 "j : "DFH SUBS$79",8,1t:~"-- INITIALIZE --" :/"-- LOAD DATA TO ARRAY ELEMENTS #5 THRU #148JA4b: JAJA1: 3,DA$(JA): ST0 1270j 3p :"-- DISPLAY RAW DATA --" "ARRAY#","RAW DATA FROM DISK"( JJ0 15: JJ,DA$(JJ): JJ2 1480<:F"-- SORT DISK COMMANDS LOAD PROGRAMS OR TEXT APPEND PROGRAMS OR TEXT VERIFY PROGRAMS OR TEXT LOAD/RUN BASIC PRG SAVE PROGRAMS OR TEXT ADD TRAILING CHARACTER AUTO LINE NUMBER CHANGE SCREEN CASE DELETE LINES ERASE SCREEN DOWN ERASE SCREEN UP FIND $w Gw` w w w #t w w w w w w v pr AtLwȄѱw*,ȱwѽv w\*]+ At ]L{Lr (r w Lu [v k -. Y 3^L L淢% & y s, y Ϛ nL 䗅 o z j䗅 o b c0b b qc q  $ j`z@ȱz)0LLw L+,-.䗅 s, s$ ˥ɥʩ p \tL7whh up t1+e`e_8 t &to o膞:˦|0Lt 0: șLtsąŅ$0 ~Hh0s ~  ~Ą兰hhLs E E  ~L} ~xS L{ v`LwwȔ.x/ /w`L{\] *!+"`! "`ȱȑ @~` !! @~`!"!Lc~LILLs(ȱ( (Lse((e)ȑ(L{ƅe`}o| wLs|0|`|0 uL)t+tNuNuOuOuة/,^,],&], GwLt| ^L~Lcu` w w At p,^& p$ {Ltܩ` Jt Pt ,t 2t >t >t()$&8*+ ~ wLq ~ Mt Gt ~ w) A` ~ ک v!Lt /{ v t tڥ v t { v bv Aveڥ Av(e kv [vۍxS p ~"Gw@ ~GxF v v$FPxS\"!\ "ȱ\ӄ$F0 L+'浈ȱ\LO} /~ c~G\*+ }\ R & Lؓz퓥{ 퓅z{`Br LA &$&H) h  xLО@vwxƎX` : Lg& &L  hL” h  n L瑥 nؘ k _-`. & CHANGE STRINGS FIND STRINGS SET BASIC MODE KILL DFH EDITOR SET TEXT EDITOR MODE INSERT LEADING QUOTE RENUMBER TEXT LINES UN-NEW (CANCEL NEW CMD) DISPLAY DFH EDITOR MENU -U1--RESERVED----- -U2--RESERVED----- -U3--RESERVED----- ~v$q-q*q'qre|({{~:{s Lw ` IMBEDDED QUOTE  DATA >74 CHAR SAVING  DISK DEV # ST=$,S,W DFH EDITOR  DFH EDITOR KILLED OOPS!  TEXT MODE  BASIC MODE APPENDING *=$ CAN'T ALTER NEXT LINE RUξ;A;A;C;D;E;E;F;F;M;M;M;Q;R;Uλ wwܩ/,^,],&], wL ^L,L`  Җ s,^& s$ L۩` +,$&8-. 6 &Lؑ 6 6 򖥐) ,L7 v { AtLr kv p, & svL3vLt v t tn wLJt >v Av8 \\\]`\]\` [v\`*\+] bvLbv p t { Șe\\] kv {`hh zwLr Dt  ` ,$ #L PrLsIw҅ Pr w ĩ Lghh a k1+eceb8 I ݽw w:˦0L 0: șLх҅$0 흢Hh0 흢  ćhhL `A `LwLLLLLBL,LrLLLsLLLULLL.LLL(LoLLLLLLUL L.LfL$LpLLLL{LLL L"L%LLLL"LJLLLLLLLULLLCLLLLLL5LLILmLLcLLLL+LR w tLswx twx` zwwLuph wL~ wH hHJJJJ "h) "H hLiii:` I `$ 0L:)(i` p Lt :  p : 8` sޅwx sυ` p tx, wx #t L~t ȱ\"ȱ\恈" L `,nLVt Ʌ*ʅ+ t t^L~ tLt v p, t v { nLwxԩo /t 2tw 5t ;t ,x ,to 2t >t_ >t`0_ r_ 3` 3  >t 8t$  ,`w@ȱw)0Lt Gw%Lw r|Lu Yta p , p$ l  ~0 ~F ~F ~ v vRRR./\ƇFt /~18/Aȱ\e wSxL}e祆Ƈe c~ K~81ȥ10\ƶ*e*+e+ }L }@A #t ȱ\"ȱ\恈" L  ]LL  L  L s, & L`L y k n L k n8 ___``_`_` _`-_.` L s Ϛ Șe__`  `hh L  s||~t~N|{~upppLUpL~pwx: 808` /{L{ t` {\]!" t\\\]!8\"]e**e++\!]"+" t i*+ tLs -Lt t@A t v - p t {` kv@ kvA@ DATA"v " 4 NEW FIXED DATA + OLD DATA FIELD"0 " 5 DATA FROM TWO OLD DATA FIELDS"` "---------------------------------------" " 9 RE-DEFINE OR EXIT" : RD0: "YOUR CHOICE -----"; K2FC(NF): 2200: K29 RD1: KB$SC$: 1780: SC$KB$ SC$"Y" 3390 : NF1: 3130 :< "---SET UP NEW FILE STRUCTURE--"B :r : NF19 " 20 FIELDS MAX. ": 3390 "MORE FIELDS"; KB$CO$(NF): 1780: CO$(NF)KB$: KB$"N" 3390& NFNF1 yLyLyL'y 0yL 0y yLy 0y yL`} 0y zL~ H, ,~ ĠҮHѠH*+,-./wx` z {L| j jJD z { {i YOU USE THIS PROGRAM TO"J "ADD FIXED DATA IT IS POSSIBLE TO CREATE"JT "RECORDS OVER 75 CHARACTERS LONG WHICH"v^ "CAN'T BE HANDLED BY 'DFH' PROGRAMS."h "REPLACING YOUR SOURCE FILE COULD CAUSE"r "EFFECTIVE LOSS OF ACCESS TO THAT DAT  Ȅe8` #LR{ z z z z $# `# {! #` {`Hh` L{ !"!e"e````F ?| zL  --" : : TY6 K1$"0": 2770 "OUTPUT FILE TO DRIVE";N K1$DO$: 2150: K1$"0" K1$"1" 2740p : DO$K1$: FO$"" FO$FI$v : : "OUTPUT FILE NAME";: K1$FO$: 2150: FO$K1$ (FO$)14 RE$"": 2830 Y1  "ANY MORE FILES";: KB$MF$: 1780: MF$KB$# MF$"Y" 2550 # :*#"---PROGRAM TERMINATION--"0#:?#: 8: 9e#$: "PRESS  Q TO QUIT, OR --"#. "ANY OTHER KEY FOR MASTER MENU"#8 1700: KB$"Q" 3660#B " PROGRAM TERMI   { { u~,"  Ơ ?| ` L|  { {  }ee L} K}Lz0 } } } bbb`b)  H " ";FI$;" -TO-  ";FO$;" "!R "PRESS  R TO RE-DEFINE OR": 1690,!\ KB$"R" 2540A!f KB$"Q" 3610G!p :!z "---OPEN INPUT AND OUTPUT FILES AND DO CONVERSION--"! :! 8,8,8,DI$":"FI$",S,R": 1980: EN0 2510! ɀ) L)? LzL~yyyy * yyL$ zyyyyӭyy z0 `FA$(000)(FA$(0),000,000)03-29-84  }ee L} K}Lz0 } } } bbb`b)  2510 FC(NF)K2: FC(NF)1 1480: 3080 FC(NF)2 1540: 3080D FC(NF)3 1480: 1540: 3080l FC(NF)4 1540: 1480: 3080 FC(NF)5 3320 "": 3230 : : "FIRST OLD DATA FIELD";: K2OP(NF): 0 :: : "FIRST RECORD (";CF;"FIELDS) IN"'D "SOURCE FILE  ";FI$;" IS:";CR$;FL$XN "NEW DATA FIELD  #";NF;" TO CONTAIN:"X " 1 DATA FROM AN OLD DATA FIELD"b " 2 NEW FIXED DATA"l " 3 OLD DATA FIELD + NEW FIXED i  ' # { { | z0Lz { {   & &   3G {i {  /{  { {  /{ { {Ly { {LFzI` Hh` H h` A."| : "REPLACE EXISTING FILE"; 1760: KB$"N" 2510  RE$"@"& :a : "DELIMITER TO BE USED";: K1$DL$: 2150: DE$K1$ FD$DE$: 1590: EF1 2980 : FD$DL$: RD1 FP0 FP1: 3040 "SAME CONVERSION": ȩ  F ?|* Ơ ?|F ?| D` ȱi ͈ `ȱ ȱ ȱ ` ȱ$eHȱe h͊  z$L  zzL  ii` | $" NAME TOO LONG ";Y0$: FO$(FO$,13) 2790  0 : 2030 R1 R0 2540S ,8,9,RE$DO$":"FO$",S,R"~" 15,EN,EM$,ET,S 9: EN62 280, EN0 10: 25106 FO$FI$ 240@ Y1$;" CAUTION ";Y0$" IF NATED ": 1 15 $L: S$"DFH BOOT": 8,8,8,"0:"PS$",P,R"$$V 180: 8: N0 360X$` "TRYING O LOAD  ";PS$;" ": 1860: 3620$j: 1: 15: " LOADING ";PS$;" "$t 824,248: PS$,8CR$" CONVERSION COMPLETE "" b  E~ E~ E~bwx z8b  zwx`##)#bb:0bbb: 0bb`B͆ ȥ`LϳLLLWLsLL~L~Lz "LE,lW ?|  W ?|L  8,X1$! 9,8,9,RE$DO$":"FO$",S,W": 1980" EN0 9: 2510" :5" 9,QT$;DE$;"_@0:";FO$;CR$;a" 1260: 1980: 8: 9: EN0 3550" Y1$;" CONVERSION NOT SUCCESSFUL ";Y0$: 2510" : CR$;" CONVERSION COMPLETE "" pL pLtL pL plets ss t{yxp4545Lu pxw t:` EL"{ upLsw]xɀ轳xxw zHzH spLpx*t+tX``t at btMu MuN  2200  K21 K220 Y1$;" ILLEGAL # ";Y0$: 3320 OP(NF)K2I  : "SECOND OLD DATA FIELD";: K2CP(NF): 2200 K21 K220 Y1$;" ILLEGAL # ";Y0$: 3350 * CP(NF)K2: 3080 4 : > : " READY TO CONVERT FILE: "  SAVE "@0:DFH SWAP",8":V" A DATA FILE HANDLER PROGRAM TO RE-STRUCTURE"" MULTI-FIELD SEQUENTIAL DATA FILES.":.:8"---SET TOP OF BASIC IF REQUIRED--"B:L (65534)72 1140: "-- C-64 COMPUTER --"$V (824) : Y1$;" DISK ERROR ";Y0$;CR$;EN;EM$;ET;ES: !:C"--SUB--TEST #BLOCKS FREE--"I:: ER0: 14,8,0,"$"DO$":": 1980: EN0 2070 14: Y1$;" CAN'T READ OUTPUT DISK DIRECTORY ";Y0$ 1860: ER1   2030 : J S1)"? ";: 1790 :1 &"--SUB--DISK CHANGE / INITIALIZATION--"7 0:M :: KB$"N": 1870[ D: KB$"Y" N: "NEED A NEW DISK";: 1780 X KB$"N" ER1: b: TY6 DR$"0": 1920 l "WHICH DRIVE";: K1$DR$: 2150: DR$K1$v ;S12);p 1,K1$: : z:%"--SUB--NUMERIC INPUT--"+:O: CU$;S1);"?";K2;CU$;S12);m 1,KB$: : K2(KB$): s:"--SUB--CHANGE CASE--":: CV(LC) (CV 2)2 LC,(CV 253):  LC,(CV 2):  2 EF1 T (FD$)127 (FD$)161 EF1@ ^ FD$"0" (FD$)0 EF1t h EF1 Y1$;" ILLEGAL DELIMITER ";Y0$;FD$z r |: "--SUB--WAIT FOR OPERATOR--" : : "PRESS ANY KEY TO CONTINUE" : KB$: KB$"" 1700  NUMBER--"B CP(21): "--SECOND OLD FIELD NUMBER--"=L AD$(21): "--NEW FIXED DATA--"iV CO$(21): "--MORE FIELDS PROMPTING--"o` :j LC59468: TY6 LC53272t CR$(13): QT$(34): ZR$(0): FA$"OD": FT%0: DR$"0"~ CU$CR$"": S1  TT0   LP75 1270!  1280' :Q "--SUB--GET OLD DATA FIELD NUMBER--"W : : "WHICH OLD DATA FIELD";: K2OP(NF): 2200  K21 K220 Y1$;" ILLEGAL # ";Y0$: 1480 OP(NF)K2: : "--SUB--GET NEW FIXED0:": PS$"DFH BOOT": 8,8,8,DR$PS$",P,R"B 3010: 8: EN0 6060C "TRYING TO LOAD  ";PS$;" ": 2460: 5990+C: 1: 15: " LOADING ";PS$;" "BC 824,248: PS$,8TE AND RE-RUN THE PROGRAM.": 5980A>: Y1$;" OVER 80 -: 8,OD$(0): TTST: PR$QT$: SP: JJ1 NFU  FC(JJ) 1310,1340,1330,1350,1370[:: FT%OP(JJ) PR$PR$OD$(OP(JJ))( 13902: FT%OP(JJ) PR$PR$OD$(OP(JJ))<: PR$PR$AD$(JJ): 1390F: PR$PR$AD$(JJ): FT%O , AND CLOSE INPUT FILE--" :( : 8: "PRESS  E TO EXIT, OR --"S "ANY OTHER KEY TO RE-DEFINE": 1700h KB$"E" 3620 : " RE-DEFINE THE CONVERSION " : 1850 : "CHANGE DISPLAY CASE";: 1770 KB$"Y" 225 248 1180: "-- NOT A PROG'D LOAD --"K` 42, (201): 43, (202): 1180Qj:t: 53280,14: 53281,14: (31);: "-- COLORS --"~ (824)248 1180: "-- NOT A PROG'D LOAD --" 45, (174): 46, (175): : : 824,0: TY2 J1 18: #14,X1$,X2$: JJ: 14- BF%(X1$ZR$)(X2$ZR$)256M* "";BF%;6);"BLOCKS FREE"k4 BF%(MC2MR)2542 >ER1: Y1$;" NOT ENOUGH BLOCKS FREE ";Y0$: H:R"--SUB--STRING INPUT--"\:f: CU$;S1);"? ";K1$;CU$ DR$"0" DR$"1" 18901: "INSTALL NEW DISK -- THEN": 1690V 15,"I";DR$: 1980: EN0  "CAN'T INITIALIZE -- TRY AGAIN.": 1890:"--SUB--TEST / PRINT DISK ERROR--":: 15,EN,EM$,ET,ES: EN0 EN63  :"========= START OF MAIN PROGRAM =========":3 "---INITIALIZE--"9 :l : MR700: MC14000: "--MAX RECORDS & CHR'S--"$ OD$(21): "--PARTITIONING ARRAY-". FC(21): "--MENU CHOICE SLECTION--"8 OP(21) "--FIRST OLD FIELD  KB$: KB$"" 1710  :> "--SUB--WAIT FOR YS OR NO ANSWER--"D :Z : KB$"Y" 1780h  KB$"N"  CU$;S1)"? ";KB$;CU$;S12);  1,KB$: : KB$(KB$,1)  KB$"Y" KB$"N"  " Y YES OR  N NO";CU$; 22: SP3096 1,0 15,8,158 SC$"N" MF$"N": DI$"0": DO$"1": TY6 DO$"0"w JJ1 20 FC(JJ)1: OP(JJ)JJ CP(JJ)JJ1: CO$(JJ)"Y" JJ CP(20)1 " READY O RE-STRCTURE DATA RCORDS ": 2560  "---OPN, ST  DATA ENRY--" =  "NTER NEW FIXD DATA";CR$QT$;AD$(NF);CU$  1,AD$(NF): : Z :y ""--SUB--TEST DELIMITR--" ,: 6: EF0: FD$"" 1610 @ " ENCLOSE COMMA/COLON/SPACE IN QUOTS ": EF1 J: (FD$)1 (FD$)3 ST0 2670d Y1$;" NO DATA RECORDS IN THE FILE ";Y0$: 2510Pn : DL$(X1$,1): FD$DL$: 1590: EF1 2510dx 8,FL$: 8:  CF0: JJ1 (FL$): (FL$,JJ,1)DL$ CFCF1 JJ : "---DEFINE, CHECK, AND CLOSE OUTPUT FILE P(JJ) PR$PR$OD$(OP(JJ))P 1390HZ: FT%OP(JJ) PR$PR$OD$(OP(JJ))pd FT%CP(JJ) PR$PR$OD$(CP(JJ))n: PR$PR$DE$: JJ: 9,PR$;CR$;: RCRC1: "";RCxLP(PR$)1 LP75 Y1$;" LONG RECORD ";Y0$;LP;"CHARACTERS" 0 TY6 DI$"0": 2630 : "SOURCE FILE IN DRIVE";K( K1$DI$: 2150: K1$"0" K1$"1" 2590W2 DI$K1$]< :F : "SOURCE FILE NAME";: K1$FI$: 2150: FI$K1$P 8,8,8,DI$":"FI$",S,R": 1980: EN0 2510Z 8,X1$: : Y0$"": Y1$""= (65534)72 TY6: Y0$(31): Y1$(158)H 2330N:"=========== START OF SUBROUTINES ==========":"--SUB--INPUT, RE-STRUCTURE, AND OUTPUT DATA LINES--":: RC0: 7);"DATA RECORDS CONVERTED" 1$: 2090: EF0 50805 SP: FT%2 51206 " CHARACTER IS USED IN HEADINGS ": 5080'6: NA$FF$: LN16: 2400: FF$NA$[6 DR$DI$: 2280: EN0 2460: M26: 4560{6 9,QT$;FD$;"_@0:";FF$;CR$;6 9,QT$;CC;FD$;PN;FD$;B1;F 403L K21 2950: 50203V K22 M32: DV3: SE%1: 5250 4` K23 M33: DV4: SE%1: 525034j K24 M34: DV3: SE%3: 5250Z4t K25 M35: DV4: SE%2: 52504~ K26 M36: DV3: SE%2: 52504 K27 M23: 45604 IELD ";CR$;>v DV,"FIELD# -IS- FIELD# SPACES WIDTH JUSTIFIED";CR$;> JJ1 CC?TE$(JJ): DV,1);TE$;5(TE$));)? DV,"-------";2);Q?TE$(NF(JJ)): DV,TE$;9(TE$));y?TE$(FB(JJ)): DV,TE$;9(TE$));?TE$(FC(J OK1 M22: 45501 OK2 M22: 45601M24: 45601:1:2"---OUTPUT OPTIONS MENU--"2:!2: 2650V2: " O U T P U T O P T I O N S "2 " 1 CHANGE SCREEN/PRINTER CASE"2 " 2 SCREEN OUTPUT ONL60< K25 M22: 5680< K29 5960< "";: 5550<: =: "NEXT PAGE #";: K2PN: 3140: PNK2: 5390=:5="---PRINT OPERATIONS SUMMARY--";=&:Y=0: 1830: PNPN1: 1580=: DV,CR$;CR$;"NUMBER OF DATA LINES PRINTED =";"/ " 4 TEST HEADINGS TO SCREEN"/ " 5 TEST HEADINGS TO PRINTER"!0  " 6 SAVE PRINT FORMAT FILE"A0 " 7 OUTPUT OPTIONS"l0  " 9 QUIT OR GO TO MASTER MENU"0*: CH$;: K2M2: 314004 K21 M24: 29500>UATION OPTIONS MENU--":^::h: 2650: " C O N T I N U E O P T I O N S ";r " 1 CHANGE SCREEN/PRINTER CASE"@;| " 2 CONTINUE -- NO PAGE BREAK"k; " 3 CONTINUE -- AT TOP OF PAGE"; " 4 CHANGE PRINTING SETUPRMAT"-: " 9 QUIT OR GO TO MASTER MENU"-D: CH$;: K2M1: 3140 .N K21 2950.X K22 4490A.b K23 3390: M24: 4560S.l K29 5980f.v "";: 4420l.:.: 3190: OK1 M12: 4360. OK2 M12: 4370 WORDPRO FILES ": PC0: 20308NA$FW$: LN12: 2400: FW$NA$8 2560: OK0 48309 SF24 5360+9 TY6 DC$: 2460: 484069 5930f9: DR$DO$: 2290: EN0 2460: 4840y9 1890: 19009: " READY FOR FIRS3 PL%PL%1@: OL(JJ)0: JJ: 1460: DV3 4550@PNBP: 4560@ :@"---PROGRAM TERMINATION--"@ :7A*: Y1$;DC$;Y0$: "TRANSFER SOURCE DATA FILE TO A"mA4 "NEW DISKETTE AND RE-RUN THE PROGRAM.": 5980A>: Y1$;" OVER 80D$;B2;FD$;B3;FD$;CR$;6( 9,QT$;H1$;FD$;CR$;QT$;H2$;FD$;CR$;: JJ062: JJJJ1: JJCC 5210'7< 9,QT$;FB(JJ);FD$;NF(JJ);FD$;FJ$(JJ);Z7F 9,FD$;FC(JJ);FD$;LH(JJ);FD$;MF$(JJ);FD$;CR$;7P 9,QT$;FH$(JJ);FD$;CR$;: 51707Z: 9,QT$;D1;FD$;DM% K29 59604: "";: 49304:4"---SAVE THE FORMAT DATA FILE--"4:$5: " READY TO SAVE PRINT FORMAT FILE "a5DA$(0)HA$HB$: JJ1 CC: DA$(0)DA$(0)FH$(JJ): JJ5: "DELIMITER TO BE USED";5K1$FD$: 3090: FD$K J)): DV,TE$;10(TE$));?TE$FJ$(JJ): DV,TE$;CR$;: JJ? DV,CR$;CR$;: DV3 PL%PL%CC13@ JJ1 CC: OC(JJ)0 5880H@ DV,OC(JJ);" OVERRUNS IN FIELD";JJ;: OC(JJ)0|@ DV," -- LONGEST WAS";OL(JJ);"CHARACTERS";CR$;@ DVY"2 " 3 PRINTER OUTPUT ONLY"2 " 4 WORDPRO FILES ONLY"3 " 5 WORDPRO AND PRINTER"23$ " 6 WORDRO AND SCREN"[3. " 7 RETURN TO SETUP OPTIONS"38 " QUIT OR GO TO MASTER MENU"3B CH$: K2M3 31DL%CR$: DL%0=D DV,"BLANK LINES ABOVE HEADING =";B1;CR$;=N DV,"BLANK LINES BELOW HEADING ="B2;CR$;1> DV,"BLANK LINS ABOVE DATA =";B3;CR$;Z>b DV,CR$;"PRINER FORMAT WAS "CR$l DV,CR$;"PRI FILE LEADING F K22 47600H K23 M24: 3400: 45601R K24 M27: SE%1: DV3 1580: 455041\ K25 M27: SE%1 DV4: 1580: 4560N1f K26 M27: 5060h1p K27 M33 4840z1z K2 5601 ""; 46501:1 310: "; " 5 PRIN OPERATIONS SUMMARY"; " QUIT OR GO TO MASTER MENU"<: CH$;: K2M4: 3140< K21 2506< K22 M42: NB1: 530g< K23 M43: NB0: 1460: PNPN1: 5640< K24 M23: 1830: PNBP: 45.M24: 4560.:."---SETUP OPTIONS MENU--".:.: 2650(/: " S E T U P O P T I O N S "S/ " 1 CHANGE SCREEN/PRINTER CASE"~/ " 2 LOAD FORMAT FILE FROM DISK"/ " 3 MODIFY HE PRINTING FORMATT DATA FILE "9: : NA$FI$: LN16: 2400: FI$NA$9 2190: ER0 2460: 9: SE%1: 4840:" NB0 1580':,NB0: 1270: 8[:6 KB$"Q" " SOURCE FILE CLOSED ": 5480|:@ " END OF SOURCE FILE ":J::T"---CONTIN  CHARACTERS IN DATA RECORD ";Y0$: 5980AH: 1830AR:A\: 3: 4: 8: 9: 14Bf: "PRESS  Q TO QUIT OR --"*Bp "ANY OTHER KEY FOR MASTER MENU"HBz 2660: KB$"Q" 6030vB " PROGRAM TERMINATED ";: 1: 15: B: DR$";FD$;CR$;: 9: 45607d:7n"---MAIN PRINT ROUTINE--"7x:8: TC%SE%: SE%1: 1460: SE%TC%: DV3 529018 "IS PRINTER AT TOP OF FORM";N8 2720: KB$"Y" 5290s8 "SET PRINTER AND THEN": 26508: SE%2 53808 " FOR )37 (H1$,1)LM$ 3530! H1$(H1$,36): " TOO LONG ! ": 3490"! : H1$(H1$,36)N! : " ";H2$;36(H2$));"";LM$;CU$;QT$e! "";: 1,H2$: ! (H2$)37 (H2$)37 (H2$,1)LM$ 3580! H2$(H2$,36): " TOO LONG ! ": 354 --"4 :> : " DEFINE THE PRINTING FORMAT ": 34101H : " MODIFY THE PRINTING FORMAT "fR : "#BLANK LINES ABOVE HEADING";: K2B1: 3140\ K20 K258 3410f B1K2: " ENTER PAGE HEADING LINE "p "USE TWO ENTRY LINES $"")6CR$(13): CU$CR$"": QT$(34)*@LM$(160): CK$(122): ZR$(0): BF$ZR$(16)O*JDV3: S122: S227: FA$"DA": FT%0: SP30979: SW30982*TDI$"0": FF$"FM-": FW$"WP-": DO$"1": TY6 DO$"0"*^M12: M42: CH$"YOUR CHOICE ---- (5)): OK1  3340: H1$DA$(1): OK1 * 3340: H2$DA$(1): JJ1: OK1 k : 3340: FB(JJ)(DA$(1)): NF(JJ)(DA$(2)): FJ$(JJ)DA$(3) FC(JJ)(DA$(4)): LH(JJ)(DA$(5)): MF$(JJ)DA$(6) OK1  3340: FH$(JJ)DA$(1)3: D1D2 D1D2(: "DATA LINES/PAGE (MAX";D2;")";: K2D1: 3140( K21 K2D2 4000:(D1K2: DM%2B1B2B3D1: @(:p("======= START OF MAIN PROGRAM =========="v(:("---INITIALIZATION--"(:(: FB(20),NF(20),FJ$(20),  : "--SUB--STRING INPUT--" :+ : CU$;S1);"? ";K1$;CU$;S12);: 3100Q : CU$;S2);"? ";K1$;CU$;S22);f : 1,K1$: : l& :0 "--SUB--NUMERIC INPUT--": :D : CU$;S2);"?";K2;CU$;S22);N 1,KB$: : K2(KB$):;CU$;: 1,FH$(JL): %(FH$(JL)KB$FH$(JL): 3900$&2: QT$;(FH$(JL),37);QT$;CU$;: 1,FH$(JL): W&<: LH(JL)FC(JL)(FH$(JL)): LH(JL)0 3940&F "FIELD HEADING IS ";LH(JL);" CHR'S TOO LONG"&P "RE-ENTER DATA FOR THIS FIELD"&ZC:6 : HA$H1$H2$: HB$HA$: HE0: JJ11@ : (HA$,JJ,2)"<>" HA$(HA$,JJ1): 2910LJ JJ(HA$) HE1: `T JJJJ1: 2880^ : HB$(HB$,JJ2,74(HA$)): h :r "--SUB--CHANGE CASE--"| : : CV (LC) (CV 2)2 LC,ACES AHEAD OF FIELD";: K2FB(JL): 3140$ K20 K278 3730$FB(JL)K2: CLCLFB(JL)O$: "PRINT DATA FIELD #";: K2NF(JL): 3140i$ K21 K220 3760w$NF(JL)K2$: "LEFT OR RIGHT JUSTIFIED";: K1$FJ$(JL): 3090$ K1$"L"CREATED WILL"+ " BE SAVED ON  DRIVE #1 ",: " OUTPUT OPERATIONS CAN BE:"-, " FROZEN BY PRESSING ANY KEY"`, " -THEN-";CR$;" ABORTED BY PRESSING  Q ", " -OR-";CR$;" RESUMED BY PRESSING ANY OTHER KEY.", "SET PRINT0! : H2$(H2$,36)! 2870: HE1 3630": "STARTING PAGE #";: K2BP: 3140:" K20 K29000 3600K"$BPK2: PNBP".: "#BLANK LINES BELOW HEADING";: K2B2: 3140"8 K20 K2B158 3630"B:"LB2K2: JL0: CL0: "--IND TO FORM A"z "COMPLETE PAGE HEADING LINE."& "USE '<>' TO SHOW PAGE NUMBER LOCATION"U "DON'T DISTURB THE QUOTE OR THE END OF"k "LINE MARKER." : " ";H1$;36(H1$));"";LM$;CU$;QT$ "";: 1,H1$: (H1$)37 (H1$ -"*hDC$" DISK FULL ": TY6 DC$DC$"IN DRIVE #"DO$*r:'+| "-------------- N O T E S --------------"9+ TY6 4280j+ " ALL SOURCE DATA AND PRINT FORMAT FILES"+ " MUST BE IN  DRIVE #0 "+ " ANY WORDPRO OUTPUT FILES : OK1  JJJJ1: JJCC 3260' 8,DA$(0): SP: D1(DA$(1)): DM%(DA$(2))@ 8: 2870: OK0: F :i : 8,DA$(0) SP ST0  8: Y1$;" BAD FILE DATA ";Y0$: OK1  :* "--SUB--DEFINE OR MODIFY PRIN FORMATFC(20),FH$(20),LH(20),OC(20),OL(20)( DA$(21),MF$(20)) 1,0: 3,3 4,4: 15,8,15& 4,"": 2800q)BL$" ")"LC5468: Y6 LC53272),CA$"": ( (LC) 2)0 CA X :b "--SUB--LOAD FORMAT FILE--"l % " LOAD RINT FORMAT FILE "I NA$FF$: LN16 2400: FF$NA$w 2800: 2190: ER0 2460: OK2:  3340: CC(DA$(1)): BP(DA$(2)) PNBP B1(DA$(3)) B2(DA$(4)): B3(DA$LCLFB(JL)FC(JL): 3720&d "OW AT COLUMN #";CL'n " MORE FIELDS"; KB$MF$(JL)E'x 2730: MF$(JL)KB$: KB$"Y" 3710': CCJL: "#BLANK LINES ABOVE DATA";: K2B3: 3140' K20 K2B1B258 3970'B3K2: D259B1B2B(CV 253): CA$"":  LC,(CV 2): CA$"":  :3 "--SUB--TEST/PRINT DISK ERROR--"9 :k : ER0: 15,EN,EM$,ET,ES: EN0 EN63  Y1$;" DISK ERROR ";Y0$; TY6 "ON DRIVE #";DR$;" "; CR$;EN;EM$;ET;ES: ER1: K1$"R" 370$FJ$(JL)K1$%: "#OF COLUMNS IN FIELD";: K2FC(JL): 3140-% K21 K278 3820I%FC(JL)K2: CLCLFC(JL)s%  "FIELD HEADING": FC(JL)39 3890% QT$;(FH$(JL),37);QT$;CU$;: 1,KB$: % QT$;(FH$(JL),38);QT$ER TO TOP-OF-FORM AND",:,"---FORMAT SOURCE MENU--,:,: 26500-: " F O R M A T S O U R C E S "[- " 1 CHANGE SCREEN/PRINTER CASE"-& " 2 LOAD FORMAT FILE FROM DISK"-0 " 3 DEFINE THE PRINTING FOIVIDUAL FIELD INFORMATION --" #V: "# OF PRINT FIELDS";: K2CC: 3140&#` K21 K220 3670P#jCCK2: JJ1 CC: MF$(JJ)"Y": JJt#t JJCC 20: MF$(JJ)"N": JJ#~: JLJL1#: " FOR PRINT FIELD #";JL;" "#: "# SP  SAVE "@0:DFH PRINT",8#:k" A DATA FILE HANDLER PROGRAM FOR PRINTING MULTI-FIELD SEQUENTIAL"" DATA FILES TO SCREEN, PAPER, OR WORDPRO FILES UNDER CONTROL OF"" A USER DEFINED FORMAT WHICH CAN BE STORED FOR FUTURE USE.":8 WS$"" 0: LS(WS$): TS39LS40(LS39)40(LS79)40(LS119)\ (WS$,1)CK$ 9,CK$;: WS$(WS$,2)o SW: 9,WS$;: 9,(31);(BL$,TS);: :"--SUB--INCREMENT & FORMAT WORDPRO FILE NUMBER--":: PCPC1: NP$"":  K1 1790( TS39: JJ1 BK: SE%1 FP0 1990@  SE%3 DV,CR$;I  JJW : FP0: ] : "--SUB--CLOSE WORDPRO FILE--" : &: SE%1 1910: 1920: 9," ";: 9 0SE%1: 1460: ::D"--SUB--WORDPRO MESSAGE (FD$)127 (FD$)161 EF1%R FD$"0" (FD$)0 EF1Z\ EF1 Y1$;" ILLEGAL DELIMITER ";Y0$;FD$`ffp:z"--SUB--SET UP INPUT FILE--":: : DR$DI$: 8,8,8,DR$":"NA$",S,R" 3010: EN0 2240 8,X1$:--" ": ,: BKB1: 1750; 6WS$HA$: HE0 WS$WS$(PN)" "HB$[ @ SE%3 DV,CA$;WS$;CR$;p J SE%1 1950 TBKB2: 1750: WS$"": JH1 CC ^WS$WS$(BL$,FB(JH)) h FJ$(JH)"R" WS$WS$(BL$,LH(JH))FH$(JH): 1660 r : 9,8,9,RE$DR$":"NA$NE$TF$ 3010: EN0 1 9: EN63 P$ "REPLACE EXISTING FILE";x. 2720: KB$"Y" RE$"@": 2310~8 B :L "--SUB--GET FILE NAME--"V :` : "FILE NAME";: K1$NA$: 3080: NA$K1$j (PNPN1: 1460: 1580( d KB$: KB$"" 1410E n: KB$: KB$"" 1390W x KB$"Q" k : TT0 1270q w : "--SUB--TOP OF FORM & NEW WORDPRO FILE--" : : LL%0: DV3 PL%0 BK66PL%: 1740: PL%0  SE%2 2650 15,"I"DR$CR$;: 3010: EN0 2460  := "--SUB--FIND BLOCKS FREE--"C :o : DR$DO$: 14,8,0,"$"DR$":": 3010 EN0 14: 2460: OK1:  JJ1 18: # 14,X1$,X2$: JJ: 14 SF(X1$ZR$)(X2$ZR$)"--SUB--PARTITION & PRINT RECORDS--"&:U: 8,DA$(0): TTST: (DA$(0))80 5950 SP: WS$"": JB1 CC: WS$WS$(BL$,FB(JB))  NF(JB)FT% WS$WS$(BL$,FC(JB)): 1340LEFC(JB)(DA$(NF(JB))): LEOL(JB) OL(JB)LEx  : "--SUB--WAIT FOR YES OR NO--" : : KB$"Y"B : CU$;S2);"? ";KB$;CU$;S22);b : 1,KB$: : KB$(KB$,1)~ KB$"Y" KB$"N"  " Y YES OR  N NO ? ";: 2740 : "--SUB--PRESET FORMAT DATA--" ::)B"---SET TOP OF BASIC IF REQUIRED--"/L:aV (65534)72 1150: "-- C-64 COMPUTER --"` (824)248 1190: "-- NOT A PROG'D LOAD --"j 42, (201): 43, (202): 1190t:~: 53280,14: 53281,14: (31);: "--COLORS--"0 PC99 2050NP$"0": PC10 NP$NP$"0"9: NP$"."NP$((PC),2): ? :^"--SUB--TEST DELIMITER--"d :*: EF0: FD$"" 21104 " ENCLOSE COMMA/COLON/SPACE IN QUOTES ": EF1: >: (FD$)1 (FD$)32 EF1H S, CONVERSION & LINE PAD--" N:1X: WS$CK$"NX:"FW$NP$: 1930_b: 9,BF$;: WS$CK$"CM:"FW$NP$: 1930l: WS$CK$"PP66:PG62:LM1:RM79": 1930v: WS$CK$"FP": 1930: WS$CK$"CM:END": WC$"": 1960:: WC$CA$:  ST0 2230* Y1$;" NO DATA RECORDS IN THE FILE ";Y0$: 2240Q FD$(X1$,1): 2090: F0 d: 8: ER1: j:"--SUB--SET P OUTPUT FILE--":: NE$"" TF$",S,W": 2300 NE$NP$: F$",P,W" RE$"" WS$WS$FH$(JH)(BL$,LH(JH))5 | JH: SE%3 DV,CA$;WS$CR$J  SE%1 1(50l BKB3 1750: LL%2B1B2B3  SE%3 DV3 PL%PL%LL% PL%66 PL%PL%66   "--SUB--PRI BLANK LINS--"  : F1 : BNA$)LN t NA$(NA$,LN): " NAME OO LONG ": 2400#~ :J "--SUB--DISK CHANGE/INITIALIZE--"P :^ : KB$"Y" "NED A NEW DISK";: 2730: KB$"N"  "CHANGE DISK"; Y6 " IN DRIVE #"DR$ " -- THN"   2030: 1910 1880: ," "; 9<  2560: OK0 140O SF49 1530s  TY6 DC$: 2460: 140~ 5930 : NA$FW$: DR$DO$: 220: EN0 2460: 140  180: : "--SUB--PRINT PAGE/FIELD HEADINGS 256: CR$;SF;"BLOCKS FREE";( TY6 " ON DRIVE #";DR$;L2 CR$;" FOR WORDPRO FILE ";FW$;NP$: OK0: R< :tF "--SUB--WAIT FOR OPERATOR--"zP :Z : "PRESS ANY KEY TO CONTINUE"d : KB$: KB$"" 2660n : KB$: KB$"" 2670 LE0 OC(JB)OC(JB)1: LE0P( FJ$(JB)"L" WS$WS$DA$(NF(JB))(BL$,LE): 1340r2WS$WS$(BL$,LE)DA$(NF(JB))<: JB: SE%3 DV,CA$;WS$;CR$;F SE%1 1950P SE%3 DV3 PL%PL%1 ZLL%LL%1: DL%DL%1: LL%DM%  : JJ1 20: FB(JJ)2: NF(JJ)JJ: FJ$(JJ)"L": FC(JJ)9M FH$(JJ)((JJ),2): MF$(JJ)"Y": OC(JJ)0: OL(JJ)0o JJ: FB(1)0: H1$"": H2$"" B13: B21: B31: D155: BP1: PN1: CC2: FD$"!":  :" "--SUB--FORM PAGE HEADING--",  (824)248 1190: "-- NOT A PROG'D LOAD --"O 45, (174): 46, (175)U:}: : 824,0: TY2: Y0$"": Y1$"" (65534)72 TY6: Y0$(31): Y1$(158) 4080:"========= START OF SUBROUTINES ==========":   SAVE "@0:DFH BOOT",8":e" A BOOTSTRAP LOADER, MEMORY CONDITIONER AND MASTER MENU FOR"" DATA FILE HANDLER (DFH) PROGRAMS.":.:8 (824)249 LF249 1180: "--NOT PET EDITOR REQ.--"B:L"--- RESTORE PET & ACTI SKS "* " 650 RECORDS PER FILE (*) "\ " 20 FIELDS PER RECORD " " 74 CHARACTERS PER RECORD " " (*)=SOME EXCEPTIONS ALLOWED. ";CR$;RD$ " ESSENTIAL OPERATOR INS r " D A T A F I L E H A N D L E R ";CR$;RD$X | " 07-15-84 BY ---- BLAINE D. STANDAGE, "  " JOHN L. DARLING & KENNETH D. STANDAGE ";CR$;RD$  " A FAMILY OF COORDINATED PROGRAMS FOR "  " PREPARATION AND COMPLETE PROCE $",P,R": 2000: 8: EN0 +X "INSTALL A DISK CONTAINING:"Ub " ";PS$;" -- THEN --": 1930: [l:v"--SUB--- WAIT FOR OPERATOR ---":: "PRESS ANY KEY TO CONTINUE": KB$: KB$"" 1940: KB$: KB$"" 19DED ? ---" :% : 824,0: : 15,8,15: TY2V  (65534)72 TY6: Y0$(31): Y1$(158)\ : " PG$(10): CR$(13): CU$CR$"": TA18 ,PG$(0)"DFH SUBS$79": PG$(1)"DFH SORT": PG$(2)PG$(1) 6PG$(3)PG$(1): PG$(4)"DFH MERGE": PG$(" " 1 CREATE OR EDIT A DATA FILE"<  " 2 LIST (HARD COPY FOR EDITING)"l* " 3 SORT BY RECORD OR FIELD CONTENT"4 " 4 MERGE SORTED FILES> " 5 PRINT PER USER DEFINED FORMAT"H " 6 SPLIT FILES BY FIELD:! "--- SETUP FOR 'C-64' COMPUTERS ---"' :[ : 55,0: 56,121: "-- TOP OF MEMORY = $7900"  56578, (56578) 3: "-- I/O CONT. TO OUTPUT"  56576, ( (56576) 252) 1: "-- SCREEN BANK = $8000"  53272,5: "-- OFFSET = $0000" 2060 SE10 2420:LF248: SE9 22503 TY2 LF249: 2250ELF250: SE10K:t: PS$PG$(SE): 1870: EN0 2320 TY6 DR$"0": 2290: "WHICH DRIVE";TA2);"0";CU$;TA); DR$: DR$(DR$,1): DR$6) 252) 3 53272,21: 648,4G 53280,254: 53281,246: (154);n 43,1: 44,8: 2048,0: "": t :: (65534)72 1430: "-- PET OR C-64 ?":("--- SETUP FOR 'PET' COMPUTERS ---"2:< (28684)242 286750401"8 : PS$,8: "--LOAD DFH PROGRAM--"7B : 30977,195: 30980,195: "--VOID SUBS--"]L PS$,8,1: "--LOAD DFH EDITOR--"cV :` "--- PROGRAM EXIT ROUTINES ---"j :t : 15: 30977,195: 30980,195: "--VOID SUBS--"~ TY6 1240VATE EDITOR AT $7000 ---"V:5` 52,0: 53,112: _jKB$"SYS28672"(13): JJ1 (KB$)t 622JJ,((KB$,JJ,1)): JJ: 158,(KB$)~ (58590)208 (14): "--80 COL SCREEN EXPAND--":: (824)250 LF250 1300TRUCTIONS ARE "8 " PRESENTED DURING PROGRAM OPERATION. ";CR$;RD$;CR$O 1930: PS$PG$(0)l: 1870: EN0 1820& " LOADING ";PS$;" ": PS$,8,10::"--SUB--- TEST FOR NEEDED PROGRAM FILE ---"D:N: 8,8,8,"0:"PSSSING "( " OF SEQUENTIAL DATA FILES CONTAINING "Z " EITHER SINGLE-FIELD OR MULTI-FIELD " " DATA RECORDS. ";CR$;RD$ " MAXIMUM DATA CAPACITY " " 50 FILES ON P O 50 DI50:"--SUB--- DISK RROR TEST ---":@: 15,EN,EM$,ET,ES: EN0 r Y1$;" DISK ERROR "Y0$ NEM$ET;S x"--- FUNCTION SLECT MNU ---": K1$"1" : " DATA FILE HANDLR FNCTIONS 5)"DFH RINT"7 @PG$(6)"DFH SPLIT": F(6F(6) PG$(8)"DFH SWAP"k JF(9)"DFH ED.PT$6": F(10)"DFH DC64$(0" T (306)21 (3080)30 2050 "ML SUBS LOADED" ^: hRD$" " ""RD$&CONNT"R " 7 EXTRACT RECORDS BY FIELD CONTNT"D " 8 RE-STRUCTRE DATA RECORDS"nf " 9 ACTIVATE DFH EDITOR &DOS"p " 10 UIT"z "YOUR CHOICE ---";TA2);K1$" ";CU$;TA) K1$: SE(K1$): SE1 SE10   648,128: "-- SCREEN DITOR = $8000"V 53280,14: 53281,14: (31);: "-- COLOR CONT."  (824)248 1540: "-- NOT A PROG'D LOAD"  45, (174): 46, (175): "-- END OF BASIC"  "--- INITIALIZE & ARE M.L. SUBROUTINS LOA "0" DR$"1" 2270: 15,"I";DR$;CR$;: 2000G EN0 "CAN'T INITIALIZE, TRY AGAIN!": 2270R 2060 : 15: 824,LF: " LOADING "PS$;" " Y2 2360$ SE8 2370. 43,1: 44,4: 1024,0: "-- START OF BASIC = $: "-- DEACTIVATE EDITOR --"FF 52,0: 53,121: "-- TOP OF MEMORY = $7900"P (58590)208 (142): "80 COL SCREEN CONDENSE"Z (824)248 1540: "-- NOT A PROG'D LOAD"d 42, (201): 43, (202): "-- END OF BASIC"n 1540xY 52,0: 53,128' (58590)208 (14): "--80 COL SCREEN EXPAND--"- TRY AGAIN!": 2270R 2060 : 15: 824,LF: " LOADING ";PS$;" " TY2 2360$ SE8 2370. 43,1: 44,4: 1024,0: "-- START OF BASIC = $: "--NOT C64 EDITOR REQ.--":T"--- RESTORE C64 & ACTIVATE EDITOR AT $9000 ---"Z:KB$"SYS36864"(13): JJ1 (KB$) 630JJ,((KB$,JJ,1)): JJ: 198, (KB$): 55,0: 56,144: 56578, (56578) 3 56576, ( (5657Al DFH DISKH%2ABLOCKS FREE. DFH BOOTDFH SORT+DFH PRINT@DFH MERGE) DFH SWAP!DFH SPLIT/ DFH SUBS$79 DFH ED.PET$70 DFH ED.C64$90 PROOF.64 EX.F.CONV-1 EX.F.CONV-2 EX.SORTEX.PARTITIONEX.G.PRINT EX.CREATE EX.CONVERT EX.SPOOL ---ML SOURCE--- DFH SUBS-SUDFH.ED.C64-S5DFH.ED.PET-S;DFH.ED.COM-S1"DFH.ED.COM-S2?"PROOF PET  SAVE "@0:DFH SORT",8":_" A DATA FILE HANDLER PROGRAM FOR DATA ENTRY, EDITING,"" SORTING AND LISTING MULTI-FIELD SEQUENTIAL DATA FILES.":.:8"---SET TOP OF BASIC IF REQUIRED--"B: L (65534)72 1140: "--C-64  : 824,0: 1550: 2400:F"====== START OF SUBROUTINES======"L:j"--SUB--INPUT RECORDS--"p:: 8,DA$(NR): TTST: NCNC(DA$(NR)): NRNR1 "";NR: TT0 NCMC NRMR  1240:"--SUB--DATA ENTRY--" ";QT$;CR$;"";(P 1,TC$(0): : LT(TC$(0))@ZJA0: LT1 1450ld: JAJA1: (TC$(0),JA,1)QT$ 1400n Y1$;"  QUOTE INSIDE TEXT ";Y0$: 1440x: JALT 1380FA$"TC": SP: FA$"TS" FT%2 (TC$(0),1)FD$ 1450 .  " LINE IS";(DA$(ML%))73;" CHARACTERS TOO LONG "9  1300? :Z "--SUB--INITIALIZE--"` : : Y0$"": Y1$"": MR700: MC14000: "--MAX RECORDS & CHR'S--"  DA$(MR),TS$(20),TC$(80) "TY2: (65534)72 TY6: Y0$(31): Y1$R CHOICE -----"= ^NR0: LL1: ZR$(0): AD$Y1$" ALREADY DELETED "Y0$U h 1,0: 15,8,15: [ r: |"--SUB-- WAIT FOR OPERATOR --" : : "PRESS ANY KEY TO CONTINUE" : KB$: KB$"" 1690 : KB$: KB$"" 1700   :&: 15,EN,EM$,ET,ES: EN0 EN63 P0 Y1$;" DISK ERROR ";Y0$;CR$;EN;EM$;ET;ES: V::sD"--SUB--STRING INPUT--"yN:X: CU$;S1);"? ";K1$;CU$;S12);b 1,K1$: : l:v"--SUB--NUMERIC INPUT--":: CU$;1  FD$"0" (FD$)0 EF1? EF1 Y1$;" ILLEGAL DELIMITER ";Y0$;FD$EK:r "--SUB--DISK CHANGE/INITIALIZE--"x: : ER0* "NEED A NEW DISK";: 1750: KB$"N" ER1: 4: TY6 ID$"0": 2130> "WHICH (CV 2)2 LC,(CV 253): CA$"": + LC,(CV 2): CA$"": 1:S"--SUB--TEST #BLOCKS FREE--"Y:: 14,8,0,"$"ID$":": 1830: EN0 2290 14: Y1$;" CAN'T READ OUTPUT DISK DIRECTORY ";Y0$ 2080: ER1 ==="8 : B "---MENU AND SELECTION--"L :V : 1680Q` : " DATA ENTRY AND SORTING FUNCTIONS "{j " 1 CHANGE DISPLAY/PRINT CASE"t " 2 LOAD DATA FILE FROM DISK"~ NR0 " 3 SORT THE FILE" NR0 "ISK"  " 9 QUIT OR GO TO MASTER MENU"8 : YC$;: K2M1: 1930: K21 2190J K22 2650f K27 2100: 2400x K29 4300 NR1 2590 K23 2940 K24 M13: 3090 K25 M14: 3530 : KCOMPUTER--";V (824)248 1180: "--NOT PROG'D LOAD--"b` 42, (201): 43, (202): 1180hj:t: 53280,14: 53281,14: (31);: "--COLORS--"~ (824)248 1180: "--NOT PROG'D LOAD--" 45, (174): 46, (175)::  :C: TS$(0)DA$(PL): NCNC(DA$(ML%)): DA$(ML%)"": SP: MFFT%i JJ1 NF: JJMF TS$(JJ)""(: " LINE#";ML%10BN;", FIELD";JJ;" ";CR$;" ";TS$(JJ);2AS((TS$(JJ),1)ZR$)< AS32 AS160 "";(160);F CR$;"+  Y1$;"  DELIMITER IN TEXT ";Y0$;QT$;FD$;QT$U : "  RE-ENTER THE FIELD ": 1320q : AS((TC$(0),1)ZR$)  AS160 TC$(0)(TC$(0),LT1)" " DA$(ML%)DA$(ML%)TC$(0)FD$: JJ : NCNC(DA$(ML%)): (DA$(ML%))74 (158) ,LC59468: TY6 LC53272@ 6CA$"": ( (LC) 2)0 CA$""z @CR$(13): QT$(34): CU$CR$"": S122: TA6: TB18 JID$"0": FT%0: M12: SS30976: SPSS3: RN1000: BN1010: LN13 TRL$Y1$" OUT OF RANGE "Y0$: YC$"YOU: "--SUB--WAIT FOR YES OR NO--" :( : KB$"Y"N : CU$;S1);"? ";KB$;CU$;S12);n : 1,KB$: : KB$(KB$,1)  KB$"Y" KB$"N"  " Y YES OR  N NO";CU$;S1)"? ";: 1770 : "--SUB--TEST/PRINT DISK ERROR--"S1);"?";K2;CU$;S12); 1,KB$: : K2(KB$): $:C"--SUB--TEST DELIMITER--"I:f: EF0: FD$"" 2000 " ENCLOSE COMMA/COLON/SPACE IN QUOTES ": EF1: : (FD$)1 (FD$)32 EF1 (FD$)127 (FD$)161 EF DRIVE";: K1$ID$: 1880: ID$K1$'H ID$"0" ID$"1" 2100TR: "INSTALL NEW DISK -- THEN": 1680y\ 15,"I";ID$: 1830: EN0 f "CAN'T INITIALIZE -- TRY AGAIN.": 2100p:z"--SUB--CHANGE CASE--":: CV(LC) ER0: 2250: JJ1 18: #14,X1$,X2$: JJ: 14=BF%(X1$ZR$)(X2$ZR$)256^ "";BF%;TA);"BLOCKS FREE"| BF%(MC2MR)2542  ER1: Y1$;" NOT ENOUGH BLOCKS FREE ";Y0$: M17: $ :. "====== START MAIN PROGRAM === 4 SAVE THE FILE"% NR1 " 5 CREATE A NEW FILE": 2480a NRLL1 " 5 EDIT OR DELETE RECORDS": 2480 " 5 ADD, EDIT, OR DELETE RECORDS" : LL1 " 6 LIST THE FILE" " 7 INITIALIZE ANOTHER D 25 NR1 M14: 3620( K26 LL1 M15: 4130(2 "";: 2510.< :NF "---LOAD FILE FROM DISK--"TP :Z : : : 1550: TY6 K1$"0": 2680d : "INPUT FROM DRIVE #";n K1$ID$: 1880: K1$"0" K1$"1" 2660x :  0 2890  NR0: "";TA);"DATA RECORDS LOADED."/ 1240: NCMC NRMR 2850f JJ1 (DA$(0)): (DA$(0),JJ,1)FD$ NFNF1 JJ: TA);"(";((NC2NR)2541);"DISK BLOCKS )" NF;TA);"FIELDS PER DATA RECORD." " ";QT ";Y0$J : M12: Y1$;" INPUT TERMINATED ";Y0$T : 8: 2390^ :=h "---SORT DATA BY FIELD--"Cr :b| : "FIELD TO BE SORTED"; K20: 1930: FS%K2: FS%0 FS%20 2940 : " A ASCENDING OR";CR$;" D DESCENDING ORDER"; : M14: LLFT%1: DF0 DF0: M13 2390 :  "---SAVE THE FILE--"& :E : NRLL1 SF0: 3220h " 1 SAVE COMPLETE FILE"& " 2 SAVE ONLY THE ";LL1;" RECORDS"0 TA);"WITH DATA IN FIELD ";FS%;" ":  IL$"" "ORIGINAL FILE NAME";CU$;S12);IL$5 : "NEW FILE NAME";: K1$NA$: 1880: NA$K1$] (NA$)LN NA$(NA$,LN): 3240c : TY6 K1$"0": 3300 : "OUTPUT TO DRIVE #";: K1$ID$: 1880 K1$"0" K1$"1" : > : 8,QT$;FD$;"_@0:";NA$;CR$;!H "SAVING -- PLEASE WAIT --": SF1 3430M!R JJ0 LL: 8,QT$;DA$(JJ);CR$;: JJ: 3470S!\ :!f : JJ0 LL: 8,QT$;DA$(JJ);CR$;: DA$(JJ)"": JJ!p FS%0: FA$"DA": SS!z JJ0 FT%1: 8,QT$; #";FS%;" "# "HAS PRODUCED ";NRLL1;" RECORDS (OUT OF";NR4# "TOTAL) WHICH CAN'T BE EDITED DUE TO"R# "NULLS IN THAT FIELD."z# "NEW RECORDS CAN NOT BE ADDED IN"# "PRESENT SORT CONDITION."#PR$"E": 3680#:#$: NFADD ";$t LL1 " D DELETE";CR$;" E EDIT ";%~ " F FINISHED";,%K1$PR$: 1880: PR$K1$K% PR$"A" NRLL1 3790h% PR$"E" LL1 3840% PR$"D" LL1 3930% PR$"F" 4050% 3690%:%: NRMR K2& EL%BN TB);RL$: EL%RN: 3840'( EL%LL10BN TB);RL$: EL%LL10RN: 3840<'2ML%(EL%BN)10.5: PLML%c'< DA$(ML%)"" TB);AD$: 3690v'F 1300: 3690|'P:'Z: "DELETE LINE # -----";: K2EL%10'd K2LL10N": 1760: KB$"N" 3690(NCNC(DA$(ML%)): DA$(ML%)""%)DF1: M13: S14);" DELETED ": 3690+):?): DF0 2400p) "DUE TO DELETIONS, THE FILE IS NOW BEING") "SORTED ON FIELD #0 IN ASCENDING ORDER.") "-- YOU MAY REID$K1$ :$ : "SOURCE FILE NAME";: K1$IL$: 1880: IL$K1$: NA$IL$L (IL$)LN IL$(IL$,LN): 2700s 8,8,8,ID$":"IL$",S,R": 1830 EN0 8: 2080: 2400 : 8,X1$: ST0 2880 FD$(X1$,1): 1980: EF$;FD$;QT$;TA);"IS THE FIELD DELIMITER." M13: LLNR1: 2900 :R" : Y1$;" FILE TOO LARGE TO LOAD. MORE THAN: ", "";MR;" RECORDS -OR- ";MC;" CHARACTERS ";Y0$6 8: : 1550: 2390@ : Y1$;" NO DATA RECORDS IN THE FILE   K1$"A": 1880: FO$K1$: K1$"A" K1$"D" 2960 :7 : FA$"DA": SS: FS%0 NRFT%^ CR$;NR;TA);"TOTAL DATA RECORDS" FT%;TA);"DATA RECORDS SORTED" NRFT% 3040 NRFT%;TA);"RECORDS WITH NULL IN FIELD";FS% : YC$;: K22: 1930: K21 SF1: 3170D K22 SF0: 3220N 3130%X :Pb : "FILE WILL BE ERASED FROM MEMORY"{l "DURING THIS SAVE. PRESS  M FOR"v "ANOTHER MENU SELECTION OR --": 1680 KB$"M" 2400 : : 3280 : ID$K1$: RE$"" : 2250: ER1 ER0: 2390G  : 8,8,8,RE$ID$":"NA$",S,W": 1830: EN0 3390_ 8: EN63 3360r  2080: 2400 : "REPLACE EXISTING FILE";: 1750: KB$"N" 2400 * RE$"@": 3330 4 DA$(JJ);CR$;: DA$(JJ)"": JJ! NR0: LL1: M12 " : 1830: 8A" EN0 Y1$;" FILE NOT SAVED CORRECTLY ";Y0$L" 2390R" :o" "---EDIT/ADD RECORDS--"u" :" : NRLL1 PR$"A": 3680" " NOTE - PRESENT SORT ON FIELD 2: FD$"!": PR$"A"#.: "# FIELDS PER RECORD";#$8K2NF: 1930: NFK2: NF1 NF20 3630]$B: "DELIMITER TO BE USED";: K1$FD$: 1880: FD$K1$w$L 1980: EF1 3650}$V:$`: FA$"TS": EL%LL10RN$j: "";: NRLL1 " A NCMC 3810& Y1$;" FILE SIZE LIMIT REACHED ";Y0$: M14: 23907&: PLLL: LLLL1: ML%LL: NRNR1: LL0 PL0X&EL%LL10BN: 1300: 3690^&:&: "EDIT LINE # -------";: K2EL%10&  K2LL10BN K2LL10BN& 1930: EL% BN K2LL10BN'n 1930: EL%K2(x EL%BN TB);RL$: EL%RN: 3930;( EL%LL10BN TB);RL$: EL%LL10RN: 3930R(ML%(EL%BN)10.5y( DA$(ML%)"" TB);AD$: 3690( "";EL%;" ";QT$;DA$(ML%)( "ARE YOU SURE";: KB$" -SORT AS DESIRED --")FO$"A": FS%0: 2990):*"---LIST THE FILE--" *: *": NRLL1 4160Q*, "ONLY THE ";LL1;" RECORDS WITH DATA"~*6 "IN FIELD ";FS%;" WILL BE LISTED."*@: "PRESS ANY KEY TO PAUSE, THEN --"*J " 50+: KB$: KB$"" 4230+ KB$"Q" JJLL,: JJ: JA1 66LP: 4,CR$;: JA&, 4: M15: 2400,,:L,"---PROGRAM TERMINATION--"R,:g,: 4: 8: 14,: "PRESS  Q TO QUIT OR --", "ANY OTHER KEY FOR MASTER M-0 824,248: PS$,8 4230+ KB$"Q" JJLL,: JJ: JA1 66LP: 4,CR$;: JA&, 4: M15: 2400,,:L,"---PROGRAM TERMINATION--"R,:g,: 4: 8: 14,: "PRESS  Q TO QUIT OR --", "ANY OTHER KEY FOR MASTER M  SAVE "@0:DFH MERGE",8#:^" A DATA FILE HANDLER PROGRAM FOR MERGING PRE-SORTED"" SINGLE OR MULTI-FIELD SEQUENTIAL DATA FILES.":.:8"--ADJUST FOR COMPUTER TYPE--"B:L (65534)72 1140: "-- C-64 COMPUTER --"1824,0: TY2: Y0$"": Y1$""H (65534)72 TY6: Y0$(31): Y1$(158)S 2600Y:"======START OF SUBROUTINES======":"--SUB--LOAD RECORDS--":: 8,DA$(DP): TTST: CCCC(DA$(DP))DA$(DP)DA$(DP)TG$: RCRC1: DPDL%(LF)1-dDA$(JO)"": NCNCLE: NRNR1: "";NRDn DL%(LF)1 1470Jx:k: NCCO NRRO CP2:  JOFT% 1350 " END OF VALID SORTED DATA. NOW USING " " FIELD ZERO SORT FOR REST OF RECORDS. " SF0: FS%SF: $: KB$"" 1560 " ,:5 6"--SUB--WAIT FOR YES OR NO--"; @:Q J: KB$"Y": 1630_ T: KB$"N" ^: CU$;S1);"? ";KB$;CU$;S12); h: 1,KB$: : KB$(KB$,1) r KB$"Y" KB$"N" | " Y YES OR  N NO ? ";: 1640 :  1,K1$: : :& "--SUB--NUMBER INPUT--", :P : CU$;S1);"?";K2;CU$;S12);n & 1,KB$: : K2(KB$): t 0: :"--SUB--TEST DELIMITER--" D: N: EF0: FD$"" 1890 X " ENCLOSE COMMA/COLON/SPACE IN QUOTES ": EF1: #";DN$;" ": 19900: "INSTALL  OUTPUT DISKETTE #";DN$;" "e: TY6 " IN DRIVE # ";DR$u "THEN, ";: 1540: 15,"I";DR$ 1710: EN0  "CAN'T INITIALIZE -- TRY AGAIN.": 2010:"--SUB-- A ";Y0$: 2190!\FD$(X1$,1): 1870: EF0 2190'f:Ip FF0 FF1: TD$FD$: : _z TD$FD$ :  Y1$;" DIFFERENT DELIMITER ";Y0$;QT$;FD$;QT$: " IN FILE - ";QT$;DT$(LF);QT$: 4220:: 7);"SPOOLING-UP IN Q TO QUIT LISTING OR ANY OTHER"*T "KEY TO CONTINUE."'+^OL1000: LP1: 4,4: 4,;OL;QT$;FD$;"_@0:";IL$;CR$;^+h JJ0 LL: OLOL10: 4,OL;CA$;QT$;DA$(JJ);CR$;+rLPLP1: LP60 LP0: JA1 6: 4,CR$;: JA+| KB$: KB$"" 42ENU", 1690: KB$"Q" 4350, " PROGRAM TERMINATED ";: 1: 15: ,-: PS$"DFH BOOT": 8,8,8,"0:"PS$",P,R"K- 1830: 8: EN0 4390o- "TRYING TO LOAD  ";PS$;" "- 2080: 4310-&: 1: 15: " LOADING ";PS$;" "  ";DT$(LF);" ": HC%DC%(LF)2568 SD3,HC%: SD2,DC%(LF)HC%256: SU: >:`"--SUB--LOAD FILE SEGMENT--"f:: 2070: CC0: RC0: TG$((LF),2) (TG$)2 TG$"0"TG$ 7);"RECORDS FROM  ";DT$(LF);" " 1260:V (824)248 1180: "-- NOT A PROG'D LOAD --"X` 42, (201): 43, (202): 1180^j:t: 53280,14: 53281,14: (31);: "--COLORS--"~ (824)248 1180: "-- NOT A PROG'D LOAD --" 45, (174): 46, (175):: : DP1! "";RCDC%(LF): TT0 =  CCCS RCRS% 1260CI:e("--SUB--DATA OUTPUT--"k2:<: 7);"RECORDS OUT TO  ";NA$;OF$;" "F: JOJO1PLE(DA$(JO))2: 9,QT$;(DA$(JO),LE);CR$;ZLF((DA$(JO),2)): DL%(LF) SS: JO1: 1340 :* : DD%(LF)0 CP1: Q  JJ0 CT: DL%(JJ)0 JJCT3l  JJ: JJCT2 1410x CP8: ~ : "--SUB--WAIT FOR OPERATOR--" : : "PRESS ANY KEY TO CONTINUE" : KB$: KB$"" 1550 : KB "--SUB--TEST/PRINT DISK ERROR--" :( : EB1W : 15,EN,EM$,ET,ES: EN0 EN63 1730 : EB0 Y1$;" DISK ERROR ";Y0$;CR$;EN;EM$;ET;ES : EB0: : "--SUB--STRING INPUT--" : : CU$;S1);"? ";K1$;CU$;S12); b: (FD$)1 (FD$)32 EF19 l (FD$)127 (FD$)161 EF1Z v FD$"0" (FD$)0 EF1  EF1 Y1$;" ILLEGAL DELIMITER ";Y0$;QT$;FD$;QT$  : "--SUB--DISK CHANGE--" : : "INSTALL  SOURCE DISKETTE  OPEN SOURCE FILE--" :1: 8,8,8,DI$":"DT$(LF)",S,R": 1700:C  EN0 2120v* EN62 1720: "TRYING TO OPEN ";DT$(LF)4 8: DN$(DD%(LF)): DR$DI$: 1970: 2070>:H: 8,X1$: FP1 2210R ST0 Y1$;" NO DAT ;8);"TOTAL DATA FILES" (TR);8);"TOTAL RECORDS")! ((TBTR2)254)1;8);"TOTAL BLOCKS"N! CSCIFC: RS%RIFC: RF%TBMC1n! TRMR1RF% RF%TRMR1! " READY TO DEFINE OUTPUT FILES "! : "";RF%;"OUTPUT FILES ARE SU 0: KB$"N" 3510# : ROMR: COMC: NFRF% CO(TBTR2)NF"# NFRF% COMC COMC:# NFRF% RO99999@#:`#$"--GET OUTPUT FILE NAME--"f#.:#8: "A SEQUENCE NUMBER WILL BE ADDED TO"#B "EACH OUTPUT FILE NAME. WHAT NAME DO 8: TT0 2310 "";RCDC%(LF);" ": DD%(LF)0N : DC%(LF)DC%(LF)RC: DL%(LF)DL%(LF)RC: T :v "--SUB--TEST #BLOCKS FREE--"|$ :. : 14,8,0,"$"DR$":": 1710: EN0 23808 14: Y1$;" CAN'T READ OUTPUT DISK DIRECTORY --SUB--OPEN/SETUP NEW OUTPUT FILE--"  : : RE$""@ : 9,8,9,RE$DR$":"NA$OF$",S,W"[ 1710: EN0 2500 9,QT$;FD$"_@0:";NA$;OF$;CR$;: NR0: NC9(NA$):  : 9: EN63  " OUTPUT FILE ";NA$;OF$;" EXISTS " A FILE DISK #--"F DC%(50): "--DATA COUNT FOR SPOOL-UP--"BP DL%(50): "--DATA LOADED COUNT--"kZ DA$(RI): "--DATA STORAGE ARRAY--"d 1,0: 15,8,15n S122: SS30976: SU30985: SD30991x FA$"DA": FT%0 CR$(13): QT$(34): CU$ K2SF: 1820: SFK2: SF0 SF20 SF0: 2750J : " A ASCENDING OR";CR$;" D DESCENDING ORDER";j K1$SO$: K1$"" K1$"A" 1770: SO$K1$: SO$"A" SO$"D" 2770 : " ENTER NAMES OF UP TO 50 SOURCE FILES ":  ONLY 50 FILES ALLOWED ": 2940^ "ANY MORE FILES";: KB$"Y"4h RV1 TCCT KB$"N"Qr 1630: KB$"Y" 2820| : CTTC1: "ALL FILENAMES OK";: 1610 KB$"Y" 3020 : "RE-DEFINE THE MERGE";: 1610 KB$"Y" RV1:" 3050 DI$K1$ : "OUTPUT FILES TO DRIVE";5 K1$DO$: 1770: K1$"0" K1$"1" 3080Y DO$K1$: TY2: DI$DO$ TY1& "--FIND FILE LOCATIONS AND SIZES--"0 :: : DK%1: DR$DI$D : DN$(DK%): 1970N DE0: SD3,254: ";Y0$: JACT: 3270 :" : FR (SD) (SD1)2561: FB (SD4) (SD5)256FRO DD%(JA)DK%: FCFC1: TRTRFR: TBTBFB "FOUND ";DT$(JA);20);((FBFR2)254)1;25);"BLOCKS" : 8: JA: DE0 3310 DE2 4220 " TR " ALL FILES MUST BE ON THE SAME DISK "# 4 " FOR 'SINGLE DRIVE' OPERATIONS "V > "NEED A NEW DISK";: 1610: KB$"Y" 3140a H 2960g R : \ "--MEMORY & DISK SPACE ALLOCATION--" f : p : "MERGE INFORMATION SUMMARY:" z FCGGESTED."! : "HOW MANY DO YOU WANT";" K2RF%: 1820: K21 K299 35203" NFK2: NFRF% 3580p" Y1$;" WARNING ";Y0$;" FILE(S) MAY BE TOO LARGE FOR"" "THE SORTING AND EDITING PROGRAM."" "DO YOU WANT TO CONTINUE";: 162"#L "YOU WANT TO USE";#VK1$NA$: 1770: NA$K1$$` (NA$)12 3710?$j " NAME TOO LONG ": NA$(NA$,11): 3640E$t:Y$~: TY2 3810o$NE0: JJ0 CT$ NA$"."(DT$(JJ),(NA$)1) NE1$ JJ: NE0 3810$ Y1$;" ";Y0$B 1980: 2350)L : JJ1 18: #14,X1$,X2$: JJ: 14KV BF%(X1$ZR$)(X2$ZR$)256x` "";BF%;6);"BLOCKS FREE FOR ";NA$;OF$j ER0: BF%(TB2TR)254NF3 t Y1$;" NOT ENOUGH BLOCKS FREE ";Y0$: ER1: ~ : " "WANT TO REPLACE IT"; 1610: KB$"Y" RE$"@": 2470# ) :S "====== START OF MAIN PROGRAM ====="Y :o "--INITIALIZE--"u :( : RI650: CI13000: MR650: MC130002 DT$(50): "--DATA FILE TITLES--"< DD%(50): "--DATCR$"": ZR$(0) " READY TO MERGE FILES "J : FP0: TN0: OD1: DI$"0": DO$"1": TY6 DO$"0"~ RV0: CT0: TC0: JJ0 50: DT$(JJ)"": JJ : : FF0: "HOW WERE THE SOURCE FILES SORTED ?" : "SORTED ON FIELD #";K1$"" : "SOURCE FILE #";TC1; RV1 K1$DT$(TC); 1770: DT$(TC)K1$: TC1 2890i" ER0: JJ0 TC1: K1$DT$(JJ) ER1r, JJ6 ER1 Y1$;" FILENAME ALREADY USED ";Y0$: 2820@ :J : TCTC1T TC49 " TC0: 2740 4270 : "--DEFINE DRIVE USAGE--" :C : RV0: FC0: JJ0 CT: DD%(JJ)0: JJu " READY TO LOCATE FILES & CHECK SIZES " TY6 3130 : "SOURCE FILES IN DRIVE"; K1$DI$: 1770: K1$"0" K1$"1 JA0 CTX 8,8,8,"0:"DT$(JA)",S,R": 1700b EN62 3270=l EN0 1720: DE1: JACT: 3270Vv DD%(JA)DK% 3270~ DD%(JA)0 8,X1$: SU: 3240 DE2: " FILE ";DT$(JA) Y1$;" FOUND ON MORE THAN ONE DISK  Y AGAIN ! ": 3140 : : FCCT " ALL FILES LOCATED ": 3440> " STILL LOOKING FOR: "g JJ0 CT: DD%(JJ)0 DT$(JJ)p JJ TY1 DK%DK%1: 3140 JJ0 50: DD%(JJ)0: JJ: FC0: TR0: TB0*   SAVE "@0:DFH SPLIT",8#:h" A DATA FILE HANDLER PROGRAM TO SPLIT OR EXTRACT RECORDS FROM"" MULTI-FIELD SEQUENTIAL DATA FILES.":." (213) 559-4887"8:B"--SET TOP OF BASIC IF REQUIRED--"L:V (65534)72 1150 FILENAME CONFLICT ";Y0$% "SOURCE FILENAME CAN'T BE RE-USED FOR"<% "OUTPUT WITH SINGLE DISK DRIVE": 1540: 3640B%:o%"--LOAD & SORT INITIAL FILE SEGMENTS--"u%:%: DP0: LF0: " READY TO LOAD INITIAL FILE SEGMENTS "%  3920&< 1980&F:&P: TNTN1: OF$".": TN10 OF$OF$"0"'ZOF$OF$((TN),2)'d:7'n: 2350: ER1 3980Q'x 2460: EN0 4040W':k': TY1 4010'ODOD1: DN$(OD)': 1980: 3950': "TRY OUTPUT AGAIN";:  NOT SAVED CORRECTLY ";Y0$: 4220(" CP8 4230), CP2 9: 3920)6 TY6 9>)@FS%0: FO$SO$: SS: DPFT%: 2260e)JFS%SF: SS: JO1: TY6 4060p)T 4110v)^:)h"--PROGRAM TERMINATION--")r:)|: EN0: " PROGRA"Q" 4310* " PROGRAM TERMINATED ": 1: 15: !+: DR$"0": PS$"DFH BOOT": 8,8,8,"0:"PS$",P,R"@+ 1710: 8: EN0 4370d+ "TRYING TO LOAD  ";PS$;" "+ "INSTALL CORRECT DISK ";+ TY6 "IN DRIVE ";DR$;+ CR$;": : 824,0: TY2: Y0$"": Y1$""R (65534)72 TY6: Y0$(31): Y1$(158)X: " READY TO SPLIT FILES OR EXTRACT DATA ": 2970"========== START OF SUBROUTINES ============":"--SUB--INPUT NEXT RECORD--":JLS%P JJ: FS1 FS0: KSKS1: 1400:Z SE$"E" 1420Sd TT0 ME2: TT0Yntx: M12 CO2 1440: CSCS1: BCBC(RC$(0)): RS$"N" PR$(CS)RC$(0): SE$"E" KEKE1: "";KE;CR$;KS  CSMR BCMB M1: : "--SUB--SAVE TO DISK--"" :9 ": D1$"Y" 1600C ,: 8P 6: 2170 @: 14,8,0,"$"OD$":": 1940: EN0 1630 J 14: "CAN'T READ DIRECTORY ON DRIVE # ";OD$;" " T 1590 ^: JJ1 18: #14,X1$,X2$: JJ: 11580 : : SF$YN$SC$",S,W"H : 9,8,9,RE$OD$":"SF$: 1940: EN0 1860k  9: EN63 2820: 1590  " FILE ";QT$;YN$;SC$;QT$;"  EXISTS "  "WANT TO REPLACE IT";  2640: KB$"Y" RE$"@": 1720  "OPTI 9,FD$"_@";OD$;":";YN$;SC$BN 6);"RECORDS OUT TO ";QT$;YN$SC$;QT$: JJ1 CSuX "";JJ;" ": 9,PR$(JJ): PR$(JJ)"": JJb 1940 : 9: EN0 BC0: CS0: RE$"": l Y1$;" FILE NOT SAVED PROPERLY ";Y0$: 4590v:"--: "--C-64 COMPUTER--"H` (824)248 1190: "--NOT A PROG'D LOAD--"fj 42,(201): 43, (202)lt:~: 53280,14: 53281,14: (31);: "--COLORS--" (824)248 1190: "--NOT A PROG'D LOAD--" 45,(174): 46,(175):!JJ0 50: DC%(JJ)0: DL%(JJ)0: JJ &: 2260: LFCT LFLF1: 3830)&FP1: FS%SF: FO$SO$: SSe&  FT%1 Y1$;" NO DATA IN SORT FIELD ";Y0$: 4220k&:&"--MERGE PROCESS CONTROL--"&(:&2DN$(OD): DR$DO$: JO1: TY1 1610: KB$"Y" 4000' 4220':': TY6 4110' 96(: 9,8,9,DR$":"NA$OF$",A": "--OPEN FOR APPEND--"P( 1700: EN0 4110k( 9: EN62 1720~( 1980: 4060(:(: 1340: 1710( EN0 Y1$;" FILEM OPERATION HALTED ": 4240): " MERGE COMPLETED " *: 8: 9: 14: "MORE FILES TO MERGE";K* 1610: KB$"Y" TB0: TR0: 2710S* 1x*: "PRESS  Q TO QUIT OR --"* "ANY OTHER KEY FOR MASTER MENU"* 1550: KB$_THEN ---";: 2010: 4270+: 1: 15: " LOADING ";PS$;" " , 824,248: PS$,8LES TO MERGE";K* 1610: KB$"Y" TB0: TR0: 2710S* 1x*: "PRESS  Q TO QUIT OR --"* "ANY OTHER KEY FOR MASTER MENU"* 1550: KB$: 8,RC$(0)D: 8,RC$(0): TTST: CECE1: SP: FT%CF RC$(CF)""J P:p"--SUB--MATCH AND STORE--"v(:2: ME2 TT1: ME0: < 1280: LSBB: PD$"A" LS(RC$(CF))LE1F JJBB LS: RM$(RC$(CF),JJ,LE) FS1: JF$: ME1:  : TT0   1330$ := "--SUB--SPOOL-UP--"C :h : 2160: 2400: EN0 1490  8,RC$(0): CE2 1530  "SPOOLING UP IN "QT$;OF$;QT$: RP%(CE1)256  HB,RP%: LB,CE1RP%256: SU : 1280: CECE4 hBF(X1$ZR$)(X2$ZR$)256M r "";BF;" BLOCKS FREE": BF(BCCS2)2542 1710y | Y1$;" NOT ENOUGH BLOCKS FREE ";Y0$ : TY2 D1$"N" 1590 D1$"N": "REMAINyqwwwt  BT# ONS AVAILABLE:"+  SQ$"I" " R RENAME OUTPUT FILE"J  " C CHANGE DISKETTES"` : " Q QUIT"; K1$OP$: 2720: OP$K1$: OP$"Q" 4590  OP$"C" 1670 & OP$"R" SQ$"I" 2480: 1710 0 "";: 1800 ::D: SUB--TEST/PRINT DISK ERROR--" :9: 15,EN,EM$,ET,ES: EN0 EN63 m Y1$;" DISK ERROR ";Y0$;CR$;EN;EM$;ET;ES: s:"--SUB--TEST DELIMITER--":: 8, RC$(0): TTST: FD$(RC$(0),1)EF0: FD$"" 2020 "EN -"*:4: SNSN1: SC$"": SN99 21207>SC$"0": SN10 SC$SC$"0"WH: SC$"."SC$((SN),2): ]R:\"--SUB--DISK CHANGE/INITILIZATION--"f:p: DR$SD$: DT$" SOURCE ": 2180z: DR$OD$: DT$" OUTPUT ": "INST FILE: ";OF$;CR$;PF$;CF* 4,CR$;"FILE";3);"NO. OF";4);"NO. OF";3);\ 4,"DATA";CR$;7);"RECORDS";3);"BYTES";4);t 4,"STRING";CR$: z: : 4,CA$;SC$;8((CS)));CS;9((BC)));BC; 4,3);QT$;(RM$,50); (RM$)50 4,C --GET FILENAMES--" :/ : "SOURCE FILE NAME";: K1$TF$: 2720: TF$K1$: 5 :l : "OUTPUT FILE NAME";: K1$YN$: 2720: YN$K1$ YN$OF$ NE$: 2480 (YN$)13  " FILE NAME TOO LONG ": YN$(YN$,12): 2480 :$;S1);"? ";KB$;CU$;S12);d : 1,KB$: : KB$(KB$,1)1n KB$"Y" KB$"N" [x " Y YES OR  N NO ? ";: 2660a :~ "--SUB--STRING INPUT--" : : CU$;S1);"? ";K1$;CU$;S12); 1,K1$: :  : "--SUB--NUMERICHANGE CASE--"@ :J : CV(LC)&T (CV 2)2 LC,(CV 253): CA$"": D^ LC,(CV 2): CA$"": Jh :ur "====== START OF MAIN PROGRAM ======"{| : "--INITIALIZE--" : : SP30979: LB30993: HB30994: SU30985: MR650: MB130 FIELD:" NE$Y1$" CONFLICT WITH SOURCE FILENAME "Y0$Q SD$"0": OD$"1": OP$"C": SE$"S": CF1: S123: ME0: PD$"B" AN$"E": BB1: LE2: SQ$"S": D1$"Y": AU$"O": 3080 : 4: " REDEFINE JOB SETUP " : M11: BC0: CS 3150D "PREVIEW # OF EXTRACTS";:$N : 2640: RS$KB$: TY6 OD$"0": 3180`X : "SOURCE FILES ON DRIVE";: K1$SD$: 2720: SD$K1$b SD$"0" SD$"1" "";: 3160l : 2390: EN0 2820: 2160: 3070v OF$TF$: 199OUTPUT FILES TO DRIVE";: K1$OD$: 2720: OD$K1$& OD$"0" OD$"1" "";: 3260; SD$OD$ TY1A :y : "FIRST RECORD IN  ";OF$;" IS:";CR$;RC$(0) "CHANGE PRINT CASE";: 2640: KB$"Y" 2890 SE$"E" SQ$"I0 4 AN$K1$ K1$"S" BB1: LE2!> AN$K1$: AN$"E" BB1: LE80: 3440:!H AN$"S" "";: 3370i!R "START POSITION";: K2BB: 2770: BBK2!\ "# OF CHARACTERS";: K2LE: 2770: LEK2!f "SELECTED FROM FIELD";CF;": ";QT$;CLOSE COMMA, COLON OR SPACE IN QUOTES": EF1: <: (FD$)1 (FD$)32 EF1a (FD$)127 (FD$)161 EF1 FD$"0" (FD$)0 EF1 EF1 Y1$;" ILLEGAL DELIMITER ";Y0$;FD$ : "--SUB--INCREMENT SEQ. NAME-ALL ";DT$;" DISKETTE"  TY6 17);"IN DRIVE # ";DR$0 "THEN, ";_: 2560: 15,"I";DR$: 1940: EN0  "CAN'T INITIALIZE -- TRY AGAIN.": 2180:"--SUB--PREVIEW TO PRINTER--":: 4,CR$;CR$;"SPLIT PREVIEW OF R$;CA$;26);(RM$,51);: PLPL1&$ 4,QT$;CR$;: PLPL1: PL60 T. : JJ1 66PL: 4,CR$;: JJ: PL0: Z8 :zB "--SUB--OPEN INPUT FILE--"L :V : 2460` : 8,8,8,SD$":"TF$",S"j 1940: EN0 8t ~ : "--SUB "--SUB--WAIT FOR OPERATOR--" : : "";4 : "PRESS ANY KEY TO CONTINUE"R : KB$: KB$"" 2570o : KB$: KB$"" 2580u {( :2 "--SUB--WAIT FOR YES OR NO ANSWER--"< :F : KB$"Y": 2650P : KB$"N"Z : CU INPUT--" :  : CU$;S1);"?";K2;CU$;S12);) 1,KB$: : K2(KB$): / :P "--SUB--QUIT OR CONTINUE--"V :| : "PRESS  E TO EXIT, OR --" "ANY OTHER KEY TO CONTINUE": 2570 KB$"E" 4590" , :6 "--SUB--C00  RC$(20),PR$(MR): LC59468: TY6 LC532721 CA$"": ( (LC) 2)0 CA$""a CR$(13): QT$(34): ZR$(0): CU$CR$"" FA$"RC": FT%0: 1,0: 15,8,15 MF$" MEMORY FULL. MUST OUTPUT FILE " PF$"BASED ON CONTENTS OF0: SS$"": SL$"": SN0: CE0: SC$"": PL8  KS0: KE0J : " S SPLIT OR";CR$;" E EXTRACT";: K1$SE$: 2720w& K1$"E" K1$"S" "";: 31000 K1$SE$ K1$"E" RM$"": SE$K1$: SE$"S" "PREVIEW TO PRINTER";: 0: EF1 4590  TT0 " NO DATA IN FILE ": 4590! 1280: CE0: 8H RS$"Y" AU$"A": 4,4: 3300[ TY6 3260 "SOURCE AND OUTPUT";CR$;"FILES ON SAME"; " DISKETTE";: KB$D1$: 2650: D1$KB$: 3300 : " ": 4190  : "SPLIT ON WHICH FIELD";: K2CF: 2770: CFK2- CF1 CF20 "";: 3330U  "FIELD";CF;" = ";QT$;RC$(CF);QT$ "SPLIT AT CHANGES IN:";CR$;" E ENTIRE FIELD, OR" * : " S SELECTED POSITIONS";: K1$AN$: 272 (RC$(CF),BB,LE);QT$!p : RS$"Y" 3570!z :" "SPLITTING/SAVING PROCESS TO BE:"\" : " A AUTOMATIC, OR";CR$;" O OPERATOR'S CHOICE";" K1$AU$: 2720: AU$K1$: AU$"A" SQ$"S": 3540" AU$"O" "";: 3470" " # YN$"."(OF$,(YN$)1) NE$: 3540$$ : "SPLIT DEFINED OK";: 2630: KB$"Y" 3070K$ : 2400: EN0 2160: 3580$ 1270: AU$"A" RM$(RC$(CF),BB,LE): 4090$:$"--MENU--"$$:$.: SE$"E" "EXTRACTING  U--";CR$;QT$;SL$;QT$%t: "------------------------------------"4&~ TT0 8: " END OF FILE ";OF$: 3750f& "NEXT RECORD GROUP IS:";CR$;QT$;RC$(CF);QT$& " 1 ADD NEXT RECORD GROUP TO MEMORY"& " 2 DISREGARD NEXT RECOR : 3820' M14 M11(: "YOUR CHOICE -----";: K2M1: 2770: M1K2'( M11 TT0 CO1: 3940H( M12 TT0 CO2: 3980i(  M13 CS0 CO3: 4000( M14 TT0 CE0: 4460( RS$"Y" SN0 2350(( M18  SQ$"I" 2480: 4020) AU$"O" 2100*: 1570: D1$"Y" TT0 2550B*SS$"": SL$"": M11: D1$"N" TT0 1490\* ME1 ME0: 3940g* 3630m*:*"--AUTOMATIC MODE--"*:*: RS$"Y" 2260*: 141OOKING FOR";CR$;"AND WHERE IS IT ";,h "LOCATED:";CR$;"WHAT DATA STRING";: K1$RM$: 2720J,rRM$K1$: LE(RM$): "IN WHICH FIELD";: K2CF: 2770z,|CFK2: "FIELD";CF;" = ";QT$;RC$(CF);QT$, "SEARCH FOR STRING AT:", " B BEGINN 2630- KB$"N" 3070-: 2400: EN0 2160: 4310- 8,RC$(0)6.: "EXTRACTING FROM FILE  ";OF$;" ";CR$;PF$;CFo. 7);"RECORDS EXAMINED";CR$;7);"RECORDS EXTRACTED". LE0 LE1. 1330: TT0 4390. RS$"N"490/: 2550: 3630/: SE$"E" 4330/ AU$"O" 45300 CS0 1330: 411010 1280: RM$(RC$(CF),BB,LE): 4100O0: CO1 1330: 3960a0 CO2 3990t0 1280: 3640z0:0"--PROGRAM TERMINATION--"0:0: NG TO LOAD  ";PS$;" "1> "INSTALL CORRECT DISK ";1H TY6 "IN DRIVE # ";SD$;"2R CR$;"THEN, ";: 2210: 4600K2\: 1: 15: "LOADING ";PS$;" "b2f 824,248: PS$,8280: 3640z0:0"--PROGRAM TERMINATION--"0:0: 6d"PLEASE WAIT...":I8861018:A:CKCKA:I,A:wn CK17539 "YOU MADE AN ERROR":"IN DATA STATEMENTS.":x886:"PROOFREADER ACTIVATED.":v 173,036,003,201,150,208| 001,096,141,151,003,173 037,003,141,152,003,169 SELECT OUTPUT FILENAMES:";CR$;" I INDIVIDUALLY OR"0# : " S SEQUENTIALLY";: K1$SQ$: 2720: SQ$K1$E# SQ$"I" 3570e# SQ$"S" "";: 3510# : "A 3-DIGIT SEQUENCE NUMBER WILL"# "BE ADDED TO THE NAME YOU ENTER": 2480FROM FILE";: 3650$8: "SPLITTING FILE";%B: "  ";OF$;" ";CR$;PF$;CF9%L RS$"Y" BC0: CS0: "": 3680h%V "";CS;"RECORDS (";BC;"BYTES) IN MEMORY"%`: CS0 AU$"A" SE$"E" "": 3700%j "";QT$;SS$;QT$;CR$;"--THRD GROUP"&: CS0 " 3 SAVE RECORDS IN MEMORY TO DISK"3' TT0 " 4 CONTINUE TO NEXT SOURCE FILE"Y' " 8 DEFINE NEW JOB SETUP"' " 9 QUIT OR GO TO MASTER MENU"' TT0 CS0 M13: 3820' TT0 M14 8: 3070(2 M19 4590(< "";: 3820(F: )P"--OPERATOR CHOICE--")Z:I)d: RM$(RC$(CF),BB,LE): SL$RC$(CF): CS1 SS$SL$T)n 1410r)x: ME1 1280: 4000}) 3630): RM$(RC$(CF),BB,LE)): 1330: 3630): 0: 2100: RS$"Y" 2310: BC0: CS0*: TT0 CE0: 3630+ ME1 1280: ME0=+"RM$(RC$(CF),BB,LE): RS$"Y" 4100b+, 1570: D1$"N" 1490: ME0m+6 4100s+@:+J"--EXTRACT MODE--"+T:+^: "WHAT DATA ARE YOU LING OF FIELD";CR$;" S SPECIFIED POSITION"-: " A ANYWHERE IN FIELD";: K1$PD$: 2720: PD$K1$>- PD$"A" PD$"B" BB1: 4290^- PD$"S" "";: 4250- "WHAT POSITION";: K2BB: 2770: BBK2-: "EXTRACT DEFINED OK";: 2480: 1570.ME0: 4330.&: ME0 2550: 3630 /0 RS$"Y" 2550: 4420/: 2480: 1570//D: ME0: 36305/N:U/X"--CONTINUATION OPTIONS--"[/b:/l: 2460: 2160: 2400: EN0 4480/vOF$TF$: 1990: EF0 4 9: 8: 40: "PRESS  Q TO QUIT OR --"0 "ANY OTHER KEY FOR MASTER MENU"1  2570: KB$"Q" 4640J1 " PROGRAM TERMINATED ";: 1: 15: x1 : PS$"DFH BOOT": 8,8,8,"0:"PS$",P,R"1* 1940: 8: EN0 470014 "TRYI 150,141,036,003,169,0035  141,037,003,169,000,133S  254,096,032,087,241,133q  251,134,252,132,253,008  201,013,240,017,201,032  240,005,024,101,254,133  254,165,251,166,252,164  253,040,096,169,013,032  210,255,165,G 210,255,032,210,255,1733  251,003,133,214,076,173=  003032,087,241,133q  251,134,252,132,253,008  201,013,240,017,201,032  240,005,024,101,254,133  254,165,251,166,252,164  253,040,096,169,013,032  210,255,165,   SAVE "@0:EX.PARTITION",8&:\"-- AN EXAMPLE PROGRAM USING THE 'PARTITION' --""-- SUBROUTINE CONTAINED IN 'DFH SUBS$79' --":"-- TOP OF MEMORY = $7900 TO PROTECT SUBROUTINES --"$ (65534)72 1080: "-- C64 COMPUTER - ALIZE --"@: DA$(20): "-- PARTITIONING SPACE FOR 20 FIELDS --"qSP30979: "-- PARTITION ADDRESS = $7903 --"FT%0: "-- PARTITIONED FIELD COUNT --"FA$"DA": "-- PARTITION ARRAY NAME --":"-- OPEN DATA FILE & GET DELIMITER --$ "-- NEXT RECORD --" 9: TITIONING SPACE FOR 20 FIELDS --"qSP30979: "-- PARTITION ADDRESS = $7903 --"FT%0: "-- PARTITIONED FIELD COUNT --"FA$"DA": "-- PARTITION ARRAY NAME --":"-- OPEN DATA FILE & GET DELIMITER -- SAVE "@0:EX.G.PRINT",8$:`"- AN EXAMPLE PROGRAM TO FORMAT AND PRINT GENEOLOGY -""- FILE DATA PREPARED BY THE 'DFH' PROGRAMS -":"-- TOP OF MEMORY = $7900 TO PROTECT SUBROUTINES --"$ (65534)72 1080: "-- C64 COMPUROGRAM TITLE & INITIALIZATION--"=: CR$(13): FT%0: FA$"DA"uRB$" "CR$ "";RB$;" G.PRINT 05-19-84 ";CR$;RB$; " A PROGRAM TO PRINT FAMILY TREE "% " (GENOV","DEC"S1$" "MHD$(11)S1$"ADDRESS: ": HD$(12)S1$"BORN: " HD$(13)S1$"OCCUPATION: ": HD$(15)S1$"FATHER: "HD$(16)S1$"MOTHER: ": HD$(17)S1$"DIED: "HD$(18)S1$"BURIED: ": HD$(20)S1$"MARRI F MAIN PROGRAM ---" d:8 n 4,4: 1720: "--- PAGE HEADING ---"t x: "DATA FILE NAME ";IL$: 8,8,8,"0:"IL$",S,R"  8,FD$: FD$(FD$,1): TTST: 1440 : : 4,CR$;: NLNL1: NL58 1710 : TT0 1760  8,DA$(0): TTST: 30979: CD(DA$(2))G CP%(CD.5)10: CP%10CD 4,HD$(21);: 1600M :u "--- PRINT PRIMARY CODE LINES ---"{ :  CP%10 1530  4,CR$;CR$;: NLNL2: NL58 1710  4,DA$(1);" ";DA$(3);: 1430 : CP%29 214,141,251%  003,206,251,003,169,000C  133,216,169,019,032,210a  255,169,018,032,210,255  169,058,032,210,255,166  254,169,000,133,254,172  151,003,192,087,208,006  032,205,189,076,235,003  032,205,221,169,032,032  CP%CP%10: 1530 :  4,HD$(CP%);K  CP%12 CP%17 CP%18 CP%21 1660Q ":u ,"--- ALLIGN & PRINT ID#'S ---"{ 6: @: 4,DA$(3);: SP18(DA$(3)): SP60 SP60 J DA$(4)"" 4,62SP);"#";DA$(4); T 1430 ^: -"+. 52,0: 53,121: 1110: "-- PET --"P8: 55,0: 56,121: "-- C64 --"VB:L"-- TEST/INSTALL M.L. SUBROUTINES --"V: (30977)21 (30980)30 1160` " LOADING DFH SUBS$79 "j : "DFH SUBS$79",8,1t:~"-- INITI" 9,8,9,"0:TESTFILE,S,R"3 9,FD$ : FD$(FD$,1)9:n"-- INPUT, PARTITION & DISPLAY DATA RECORDS --": 9,DL$: TTST DL$DA$(0)DL$: SP: "-- PARTITION --"  " ";: JJ1 FT%: DA$(JJ),: JJ:  TT0 1260:h"--- PRINT DATE ENTRIES ---" r:D |: 4,(DA$(3),2);" ";MO$(((DA$(3),6,2)));q  4," ";(DA$(3),4);" ";DA$(4);: 1430w : "--- PRINT PAGE HEADING ---" : : JJNL1 66: 4,CR$;: JJ : 4,PH$;CR$;CR$;: NL3: : TER --"0. 52,0: 53,121: 1110: "-- PET --"U8: 55,0: 56,121: "-- C64 --"[B:L"-- TEST/INSTALL M.L. SUBROUTINES --"V: (30977)21 (30980)30 1160` " LOADING DFH SUBS$79 "j : "DFH SUBS$79",8,1t:~"--PNEOLOGY) DATA FILES. ";CR$;RB$;c " ---- REQUIRES DFH SUBS$79 ---- ";CR$;RB$;""i: DA$(10),MO$(12),HD$(30) JJ0 12: MO$(JJ): JJ " ? ","JAN","FEB","MAR","APR","MAY","JUN" "JUL","AUG","SEP","OCT","ED: "9 (HD$(21)S1$" ": HD$(23)S1$"CHILDREN: "t 2HD$(25)S1$"STEP ": HD$(26)S1$"ADOPTED: " <PH$"GENEOLOGY DATA FOR 'STANDAGE' FAMLIES"CR$ FPH$PH$"" P: Z"--- START O ;07.15.84 _@0:DFH.ED.C64-S ;OPT NOLIS .OPT GEN ; ;****************************** ;* DFH EDITOR * ;* JOHN L DARLING * ;* C64 VERSION * ;* BASIC V2.0 * ;****************************** ; ;-- SPECIFI = $A4A2 ;INSERT LINE INTO SOU;RCE RC442 = $A533 ;FIX CHAINING AFTER INS/DEL RC52C = $A613 ;NEXT LINE SEARCH RC572 = $A659 ;SET COLD START PTRS RC5A7 = $A68E ;'RUN' SETUP RC6C4 = $A7AE ;GOTO 'RUN' RC873 = $A96B ;ASCII# TO FIXPT IN $11,12 RCDF8 = $AEFD ;C A = $FFB1 ;SEND IEEE 'LISTEN' RF128 = $FF93 ;SEND IEEE 'LIS SEC ADDR' RFF96 = $FF96 ;*SEND IEEE 'TLK SEC ADDR' RF16F = $FFA8 ;*SEND IEEE 'CHARACTER' RF17F = $FFAB ;SEND IEEE 'UNTALK' RF183 = $FFAE ;SEND IEEE 'UNLISTEN' RF18C = $FFA5 ;IEEE INPUT ADDR RF2A 8 ;SAVE ROUTINE-LESS PARSING RF8E6 = $F8BE ;I/O WAIT RFC7B = $FC93 ;SETUP FOR INPUT RFFC6 = $FFC6 ;SETUP FOR INPUT RFFC9 = $FFC9 ;SETUP FOR OUTPUT RFFCC = $FFCC ;SET I/O DEFAULTS RFFCF = $FFCF ;INPUT IEEE CHAR RFFD2 = $FFD2 ;PRINT AR VALUE RFFE4 = $FFE4 -START OF BASIC PTR Z2A = $2D ;EOB/SOV-END OF BASIC PTR Z2E = $31 ;STRING LENGTH Z30 = $33 ;BOS-BOTTOM OF STRINGS PTR Z34 = $37 ;TOP OF RAM MEM PTR Z40 = $43 ;INPUT VECTOR Z46 = $49 ;FIND/CHANGE CHAR Z52 = $55 ;FUNCTION JMP VECTOR Z5C = $5F ;PTR-A Z5F = "--- TEST FOR MORE FILES ---":.: 8: "END OF FILE"l "MORE FILES TO PRINT Y";KB$: (KB$,1)"Y" 1400| 4: 4: 4,DA$(3);: SP18(DA$(3)): SP60 SP60 J DA$(4)"" 4,62SP);"#";DA$(4); T 1430 ^: AR Z97 = $C5 ;LAST KEY DEPRESSED Z9D = $93 ;LOAD(0)/VERIFY(1) FLAG Z9E = $C6 ;# OF KBD CHAR IN BUFFR ZA8 = $CD ;CURSOR TIMING FLAG ZB0 = $9A ;CMD DEV# ZC4 = $D1 ;SCREEN PTR ZC9 = $AE ;LOAD END ADDR ZD1 = $B7 ;FILE NAME LENGTH ZD2 = $B8 ;CURRENT LOG FILE#$9000 ;C64 MAIN ENTRY ; ;--- SYS 9*4096 ACTIVATION ENTRY --- ; ENT00 JMP STAR00 ;SET WEDGE ENT01 JMP KILLPG ;PRG-DEACTIVATE ENT02 JMP STAR00 ;RESERVE ENT03 JMP STAR00 ;RESERVE TESBYT .BYT $F3 ;ED-ACTIVE FLAG ; ;------- SET WEDGE -------- ; STAR00 JSR KIL STA BOT ;BOTTOM SCREEN ADDRESS LDA #$08 ;DEFAULT DISK DEV # STA TMPDVN ;DEFAULT DEV # ; ;--- PROTECT TOP OF MEMORY --- ; LDX #ENT00 CPX Z34 ;HIMEM ADDR TYA SBC Z34+1 BCS STAR03 ;HIMEM=OK ; STX Z34 ;HIMEM ADDR STY Z34+1 STAR03 JMP MENU01 ;DISPLAY MENU & EXIT ; ; ;--- CHRGET ENTRY $79 --- ; ENTRY1 STA ZB5 ;SAVE AR STX ZAD ;SAVE XR LDX #$F2 STX TESBYT ;ACT FLAG=ON LDX Z77+1 ;CHECK TEXT BUFFER CPX #>Z200 ;$02XX ? BNE RESTAX ;NO ; LDX Z77 ;$0200 ? BNE RESTAX ;NO ;ED CONSTANTS -- ; COL = $D8 ;-40 COL SCREEN LINE ; ;-- C64 ROM CALLS -- ; RA437 = $A437 ;PRINT ERROR RC377 = $A462 ;RESTORE DATA PTRS RC392 = $A483 ;WARM START W/0'READY' RC399 = $A48C ;IMMED MODE REF CALL RC3AE = $A49F ;TOKENIZE LINE AND INSERT IT RC3B1HECK FOR COMMA RCE03 = $AF08 ;'SYNTAX ERROR' RDB55 = $BC49 ;FIX TO FLT PT RDCD9 = $BDCD ;CONV FIX PT # RDCE9 = $BDDD ;ASCII# TO STRING RE0F9 = $E0F9 ;*ERROR HANDLER RE62E = $EA31 ;IRQ VECTOR RE84C = $D018 ;SCREEN CASE RF0B6 = $FFB4 ;SEND IEEE 'TALK' RF0BE = $FFC3 ;CLOSE CURRENT FILE RF301 = $F6ED ;TEST STOP KEY RF355 = $F4F3 ;INPUT PRG FILE RF40A = $F5AF ;'SEARCHING' RF42E = $F5D2 ;'LOADING' OR 'VERIFYING' RF466 = $F3D5 ;OPEN PRG FILE RF524 = $FFC0 ;OPEN IEEE FILE RF570 = $F715 ;PRINT ERROR RFFD8 = $FFD;GET A CHAR RFFFE = $FFFE ;ROM TEST ; ;-ZERO PAGE REFERENCES (BASIC 2.0)- ; Z05 = $0B ;BASIC BUFFER PTR Z0A = $0A ;ANOTHER L/V FLAG Z0D = $FF ;OUTPUT SUPPRESS FLAG Z11 = $14 ;LINE # BUFFER PTR Z1F = $22 ;# TRANSFER PTR Z21 = $24 ;INDEX PTR Z28 = $2B ;SOB$62 ;FAC Z70 = $73 ;CHRGET ENTRY Z76 = $79 ;CHRGOT ENTRY Z77 = $7A ;BUFFER PTR Z79 = $7C ;WEDGE ENTRY Z7C = $7F ;MODE INDICATOR Z80 = $83 ;TEMP Z82 = $85 ;TEMP PTR Z84 = $87 ;*TEMP PTR Z86 = $89 ;*TEMP PTR Z90 = $0314 ;IRQ VECTOR Z96 = $90 ;'ST' STATUS V TSX ;TEST IF $B40D(4.0)CALL LDA Z100+2,X ;OR RC399 (3.0) CMP #>RC399 ;WEDGE CALL REF BEQ CKLIST ;YES-IMMED MODE BNE RESTAX ;NO ; RESTYR LDY ZB6 ;RESTORE YR RESTAX LDX ZAD ;RESTORE XR LDA ZB5 ;RESTORE AR CMP #$3A ;CHRGET # TEST BCC ENTRY2 ;A # R ZD3 = $B9 ;CURRENT SEC-ADR ZD4 = $BA ;CURRENT DEV# ZDA = $BB ;FILE NAME ADDR-L,H ZFB = $AE ;ML-ADDR-L,H ; ;WORKING RAM REFERENCES (BASIC 2.0) ; Z100 = $0100 ;STACK REF Z200 = $0200 ;BASIC INPUT BUFFER (80 MAX) Z26E = $0276 ;KEYBOARD BUFFER (10 MAX) ; *=L01 ;REMOVE ALL WEDGES ; LDX #OLDZ70-TABL01 ;SET NEW WEDGE $79-$87 STAR01 LDA TABL01,X STA Z79,X STX Z0D ;SUPPRESS FLAG OFF DEX BPL STAR01 ; LDA ZC4+1 ;SCREEN ADDR-HI AND #$FC ;NORMALLY $04 STA TOP ;CURRENT TOP OF SCREEN ORA #$03 ;NORMALLY $07  3 ;YES ; IRQV02 STA IRQ000 ;NEW KEY LDA #$10 STA IRQ001 ;TIMER 1 IRQJMP JMP RE62E ;REMAINDER OF IRQ ; IRQV03 LDA Z90+1 CMP #>RE62E ;ORIG IRQ ? BEQ IRQJMP ;YES ; LDA IRQ001 ;TIMER 1 BEQ IRQV04 ;RAN OUT ; DEC IRQ001 BNE IRQJMP IRQV04 DEC IRQ002 ;TI NEXT INSTR APPEN0 LDA #'&' STA ZB3 ;DISK OPERATION CMP #$5D ;VERIFY ? BNE DISOP1 ;NO ; LDA #$01 ;VERIFY FLAG .BYT $2C ;SKIP NEXT INSTR DISOP1 LDA #$00 ;LOAD FLAG STA Z9D STA $0A ;2ND L/V FLAG JSR DPARS1 ;GET INPUT PARAM LDY ZD1 ;LEN>0 ? BNE DI #$60 JSR OPEN01 ;OPEN FILE JSR INCHAR ;BRK IF NOT THERE JSR RFFCC ;DEFAULT I/O LDA ZD2 ;FILE # JSR RF2AE ;CLOSE IT DISOPD JSR Z70 ;NEXT CHAR CMP #',' BNE DISOPG ;NOT ',' ; LDA ZB3 CMP #'^' ;LOAD/RUN ? BEQ DISOPH ;SYNTAX ERROR ; CMP #'&' ;AP #$00 STA ZD2 ;LOG FILE 0 LDA #$60 STA ZD3 ;SEC ADDR JSR RF40A ;SEARCH MSG JSR RF466 ;OPEN LDA ZD4 ;DEV# JSR RF0B6 ;SEND TLK LDA ZD3 JSR RFF96 ;SEND TLK SEC ADDR JSR RF18C ;INPUT BYTE STA ZFB ;ADDR-L JSR RF18C STA ZFB+1 ;ADDR-H LDA Z80 BNE END ; SEC ;START ADDR=EOB-2 LDA Z2A SBC #$02 STA ZFB LDA Z2A+1 SBC #$00 STA ZFB+1 JSR DISADR ;DISPLAY ADDR LDX #APPMSG-MES00 LDY #HEXMSG-APPMSG JSR PMESS ;'APPENDING' JMP DISOPN ; DISOPL JSR DISADR ;DISPLAY ADR JSR RF42E ;LOAD/VER MSG DISOPNINT ERROR ; DISOPF LDA #$0D ;RET JSR RFFD2 LDA Z80 ;REL LOAD BNE DISOP8 ;NO...EOB SAME ; LDA ZC9 ;FIX END OF BASIC STA Z2A LDA ZC9+1 STA Z2A+1 DISOP8 JSR RC572 ;FIX POINTERS JSR RC442 ;FIX CHAINING LDA ZB3 CMP #'^' BEQ DISOP6 ;YES...LOAD/RUN ;TS ; ;--- CHRGET ENTRY $7D --- ; ENTRY2 CMP #$20 ;IGNORE SPACES BEQ CHRENT ;NEXT CHAR ; JMP OLDZ81 ;FINISH CHRGOT TEST ; ;--- CHECK FOR BATPRO COMMAND --- ; CKLIST JSR RESTAX ;GET NEXT CHAR BCS CKLIS1 ;NOT A # ; JMP NLIN01 ;# -> INSTALL LINE ; CKLIS1IS4 INX LDA TABL02-1,X BPL CKLIS4 ;MOVE TO JMPTABLE ADDR ; LDA TABL02,X BNE CKLIS2 ;TRY ANOTHER COMMAND BEQ RESTYR ;END OF LIST EXIT ; CKLIS5 INX ;A MATCH INY BNE CKLIS3 ;TRY ANOTHER CHAR ; CKLIS6 STY Z77 ;SAVE YR LDA Z05 ;UPDATED XR ASL A TAX TINE --- ; IRQVEC LDA Z100+5,X CMP #RF8E6 ;WAIT ? BNE IRQV01 ;NO... ; JSR RFC7B ;INIT I/O IRQV01 LDA Z97 ;KEY DEPRESSED CMP #255 ;ANY KEY ? BEQ IRQV02 ;NO... ; CMP IRQ000 ;SAME KEY ? BEQ IRQV0 RFFD2 ;DISPLAY FILENAME JSR Z70 ;PARSE COMMAND CMP #$00 ;EOL ONLY BEQ PRSE06 ;':' OR EOL ; CMP #',' ;DELIMITER ? BNE PRSE05 ;NO ': ,' OR EOL ; JSR RCDF8 ;VERIFY COMMA ($F516 ALSO) PRSE06 JSR Z76 ;REGET CHAR JSR RNGE02 ;SET LINE RANGE LDA #$0D JMER 2 BNE IRQJMP ; LDA #$04 STA IRQ002 ;TIMER 2 LDA #$00 STA Z97 ;NO-KEY DEPRESSED BEQ IRQJMP ;ALWAYS ; ; ;--- LOAD OR VERIFY -- ; LOAD00 LDA #'/' .BYT $2C ;SKIP NEXT INSTR LRUN00 LDA #'^' .BYT $2C ;SKIP NEXT INSTR VERF00 LDA #']' .BYT $2C ;SKIPSOP2 ;OK ; JMP RCE03 ;SYNTAX ERROR ; DISOP2 LDA Z7C BPL DISOP3 ;BASIC PRG ; LDA ZB3 CMP #'^' ;LOAD-RUN ? BNE DISOP9 ;NO...OK ; DISOPB JMP OOPS01 ;OOPS-ERROR ; DISOP9 JMP GETF01 ;TEXT ; ; ;--- LOAD/VERIFY/APPEND PRG FILES --- ; DISOP3 LDAPEND ? BEQ DISOPH ;SYNTAX ERROR ; JSR Z70 ;IS NEXT CHR A # CMP #'$' ;HEX ? BNE DISOPM ;NO...ABS LOAD ; JSR HEXBYT ;START ADDR IN Z86 BCS DISOPM ;OK-SPECIFIED LOAD ; DISOPH JMP RCE03 ;SYNTAX ERROR ; DISOPG CMP #$00 BNE DISOPD ;NOT EOL ; DISOPM LDA DISOPJ ;NOT REL LOAD ; LDX Z28 ;REL LOAD...SOB LDY Z28+1 BNE DISOPK ;ALWAYS ; DISOPJ CMP #'$' ;SPECIFIC LOAD ? BNE DISOPY ;NO..ABS LOAD ; LDX Z86 ;SPECIFIED START ADR LDY Z86+1 DISOPK STX ZFB STY ZFB+1 DISOPY LDA ZB3 CMP #'&' BNE DISOPL ;NOT APP JSR RF355 ;LOAD FILE JSR DISADR ;DISPLAY ADR JSR HEXOST ;PRINT 'ST=XX' LDA Z96 ;ST AND #$BF BEQ DISOPF ;ST=OK ; DISOP7 LDA Z9D BNE DISOP4 ;VERIFY ERROR ; LDX #$1D ;LOAD ERROR .BYT $2C ;SKIP NEXT INSTR DISOP4 LDX #$1C ;VERIFY ERROR JMP RA437 ;PR JMP MODED1 ;DISPLAY MODE ; DISOP6 JSR RC5A7 ;SETUP-RUN JMP RC6C4 ;EXECUTE RUN ; ; ;--- PARSE SAVE FILENAME --- ; PRSE02 INC ZD1 INC ZD1 ;NEW FILE NAME LENGTH LDX #SAVMSG-MES00 LDY #POSMSG-SAVMSG JSR PMESS ;'SAVING ' JSR Z76 ;REGET CHAR PRSE05 JSR STY ZB6 ;SAVE YR LDX #$00 STX Z80+1 ;QUOTE MODE FLAG STX Z05 ;INIT INDEX CTR CKLIS2 LDY Z77 CKLIS3 LDA Z200,Y ;2ND - 3RD CHR SCAN EOR TABL02,X BEQ CKLIS5 ;A MATCH ; CMP #$80 ;FINAL MATCH TEST BEQ CKLIS6 ;OK INSTALL IT ; INC Z05 ;UPDATE INDEX CKL LDA JMPTBL+1,X ;JMP ADDR -> STACK PHA LDA JMPTBL,X PHA JSR RESTYR ;RESTORE Y, X, A CHRENT JMP Z70 ;NEXT CHAR ; ; ;--- RESTORE NORMAL IRQ --- ; IRQNRM SEI LDA #RE62E STA Z90+1 CLI RTS ; ;--- NEW IRQ ROU SR RFFD2 LDA #$6E JMP OPEN00 ;OPEN THE FILE ; ; ;-- SEND DISK COMMAND -- ; DISC00 LDA TMPDVN STA ZD4 ;DEV # JSR RF0BA ;SEND LISTEN LDA #$6F ;SEC ADDR 15 STA ZD3 JSR RF128 ;SEND LIS SEC ADDR LDY #$00 DISC01 LDA (Z77),Y BEQ DISC02 ;EOL ; JSR RF16 JSR RFF96 ;SEND TLK SEC ADDR JSR RF18C ;READ 1ST CHAR STA Z5F JSR RF18C ;READ 2ND CHAR STA Z5F+1 CMP #$30 ;2ND CHAR=0 ? BNE DCERR2 ;NO CMP Z5F ;1ST CHAR=0 ? BEQ DCERR3 ;YES..BOTH ZERO ; DCERR2 JSR SUPOFF ;PRINT ERROR DCERR3 LDA Z5F JSR RCA45X ;D RN IT OFF DCERR6 RTS ; ;-- DR PARAMETER TEST ON SAVE -- ; SAVTST LDY #$00 LDA (Z77),Y CMP #'@' ;REPLACE BNE SAVT01 ;NO ; INY LDA (Z77),Y SAVT01 AND #$FE CMP #$30 ;DR 0 OR 1 ? BEQ SAVT02 ;YES ; SAVT03 JMP RCE03 ;SYNTAX ERROR ; SAVT02 JMP DPARS1 ;PA ;EOB LDY Z2A+1 STX Z86 ;SAVE END ADDR STY Z86+1 LDA TMPDVN STA ZD4 SAVE14 JSR Z70 ;SCAN TO END OF NAME CMP #$00 ;EOL ? BEQ SAVE05 ;BASIC SAVE ; CMP #',' ;END OF NAME ? BNE SAVE14 ;NO ; JSR Z70 CMP #'$' ;ML SAVE ? BNE SAVT03 ;NO...ERROR(FUTURSR PLA JSR RESTAX ;RESTORE REG JSR RC873 ;GET LINE # INTO Z11 BEQ NLIN04 ;LINE # ONLY ; NLIN05 LDA Z82 ;IN AUTO MODE ? ORA Z82+1 BEQ NLIN04 ;NO ; LDA Z11 ;LINE # FOR NEXT LINE CLC ADC Z82 STA Z5F+1 LDA Z11+1 ADC Z82+1 STA Z5F LDX #$90 ;CONV;#CHRS IN KBD BUFF NLIN04 CMP #$3A ;EOL ? BEQ NLIN05 ;':' ; LDX Z7C ;TEXT MODE ? BMI CMPK01 ;YES ; JMP RC3AE ;TOKENIZE BASIC LINE ; ;--- SQUISH TEXT LINE --- ; CMPK01 LDX #$FF LDY #$00 CMPK02 INX LDA Z200,X ;SKIP SPACES CMP #$20 BEQ CMPK02 BNE CEEP IT CMPK06 LDA Z200,X ;COMPRESS BUFF BEQ CMPK07 ;END OF LINE ; STA Z200,Y INX INY BNE CMPK06 ;BRANCH ALWAYS ; CMPK07 STA Z200,Y ;FIX FAKE LINK INY INY STA Z200,Y INY INY INY JMP RC3B1 ;INSTALL LINE ; ; ;--- ERASE SCREEN UP OR DOWN --- ;FROOWN ? BMI ERAS02 ;DWN ; LDA #$FF ;-1 JSR Z84MAR ;Z84=Z84-AR LDX #$01 ;SWAP Z86 & Z84 ERAS04 LDA Z84,X PHA LDA Z86,X STA Z84,X PLA STA Z86,X DEX BPL ERAS04 BMI ERAS01 ;ALWAYS ; ERAS02 LDA #COL ;-40 JSR Z84MAR ;Z84=Z84-AR ERAS01 LDX #$00 LDA  BCC ASC104 ;ERROR ; STA TMPYR ;MS JSR ASC002 ;2 CHAR CONV TAX ;LS LDA TMPYR ;MS ASC104 RTS ;C=1 ON EXIT IF OK ; ; TMPAR .BYT $FF ;TEMP AR TMPXR .BYT $FF ;TEMP XR TMPYR .BYT $FF ;TEMP XR TMPFLG .BYT $FF ;LOAD/VER FLAG TMPCMD .BYT $FF ;OLD CMD DEV TMPFIL .BYT $FF ;OLD CMD FIL # TOP .BYT $04 ;TOP OF SCREEN BOT .BYT $07 ;BOT OF SCREEN ; ZB3 = TMPFLG ZB5 = TMPAR ZB6 = TMPYR ZAD = TMPXR ZBA = TMPCMD ZBB = TMPFIL ; .FIL DFH.ED.COM-S1 ; ;--- ASCII ADDR CONVERSION (X,A) --- ; ASC004 JSR ASC002 ;2 CHAR CONV F ;SEND CHAR INY BNE DISC01 ;ALWAYS ; DISC02 JSR RF183 ;'UNLISTEN' ; ;-- READ ERROR CHANNEL -- ; DCERR0 JSR SUPR00 ;TOGGLE SUPRESS FLAG ; ;-- PRINT ALL ERROR CODES -- ; LDA TMPDVN STA ZD4 ;DEV # JSR RF0B6 ;SEND 'TALK' LDA #$6F STA ZD3 ;ERR-CH 15 ISP 1ST MSG CHAR LDA Z5F+1 DCERR4 JSR RCA45X ;ERR MSG CMP #$0D ;RET ? BEQ DCERR5 ;YES... END OF MESSAGE ; JSR RF18C ;NEXT CHAR BNE DCERR4 ;ALWAYS ; DCERR5 JSR RF17F ;SEND 'UNTALK' SUPOFF BIT Z0D ;SUPPRESS FLAG OFF ? BPL DCERR6 ;NO ; JSR SUPR00 ;TURSE FILENAME ; ; ;-- SAVE PRG OR TEXT FILES -- ; SAVE00 JSR SAVTST ;SAVE PARAM ; LDA Z7C ;TEXT ? BPL SAVE04 ;NO... ; SAVE02 JMP PUTF01 ;SAVE TEXT ; ; ;--- SAVE PRG FILES --- ; SAVE04 LDA Z28 ;SOB STA Z84 ;SAVE START ADDR LDA Z28+1 STA Z84+1 LDX Z2AE LINE SAVE) ; JSR HEXADR ;START ADDR BCC SAVT03 ;ERROR ; SAVE05 LDA #$F3 ;DEACT FLAG STA TESBYT LDA #Z84 ;START ADDR LDX Z86 LDY Z86+1 JSR RFFD8 ;SAVE JMP DISBRK ;READ ERROR CH EXIT ; ; ;-- INSTALL A NEW NUMBERED LINE -- ; NLIN01 PLA ;BACKUP-1 JERT TO DEC SEC JSR RDB55 ;FLOAT IT JSR RDCE9 ;MAKE ASCII # LDX #$00 ;PUT ASCII # IN KEYB NLIN02 LDA Z100+1,X ;NO START SPACE BEQ NLIN03 ;DONE ; STA Z26E+1,X INX BNE NLIN02 ;BRANCH ALWAYS ; NLIN03 LDA #$20 ;EXTRA SPACE STA Z26E+1,X INX STX Z9E MPK04 ;(=JMP) ; CMPK03 INX CMPK04 LDA Z200,X ;GET CHR CMP #$30 ;IS CHR < '0' ? BCC CMPK05 ;YES... END OF LINE # ; CMP #$3A ;IS CHR > '9' ? BCC CMPK03 ;NO...NEXT LINE # CHR ; CMPK05 LDA Z200,X ;NEXT CHAR CMP #$20 ;SPACE ? BNE CMPK06 ;NO... ; INX ;KM THE PRESENT CURSOR POSITION ;SYNTAX : ;EU ; ;ED ; WIPU01 LDX TOP ;TOP=$0400(NORMAL) LDA #$00 BEQ ERAS00 ; WIPD01 LDX BOT ;BOT=$07FF(NORMAL) LDA #$FF ERAS00 STA Z86 STX Z86+1 LDA ZC4 ;Z84=ZC4 STA Z84 LDA ZC4+1 STA Z84+1 BIT Z86 ;UP OR D#$20 ;SPACE STA (Z84,X) LDA #$01 JSR Z84PAR ;Z84=Z84+1 LDA Z86+1 LDY Z86 CPY Z84 SBC Z84+1 BCS ERAS01 ;Z86 >= Z84 ; RC392X PLA ;Z86 < Z84 PLA JMP RC392 ;WARM START & EXIT ; ; ;--- ASCII ADDR CONVERSION (X,A) --- ; ASC004 JSR ASC002 ;2 CHAR CONV  ;07.15.84 _@0:DFH.ED.PET-S ;OPT NOLIS .OPT GEN ; ;****************************** ;* DFH EDITOR * ;* JOHN L DARLING * ;* PET VERSION * ;* BASIC 2.0/4.0-(40/80)COL * ;****************************** ; TOP = $80 ; SETUP FOR INPUT RFFC9 = $FFC9 ;SETUP FOR OUTPUT RFFCC = $FFCC ;SET I/O DEFAULTS RFFCF = $FFCF ;INPUT IEEE CHAR RFFD2 = $FFD2 ;PRINT AR VALUE RFFE4 = $FFE4 ;GET A CHAR RFFFE = $FFFE ;ROM TEST ; ;-ZERO PAGE REFERENCES (BASIC 2.0) ; Z05 = $05 ;BASIC BUFFER  ;TOP OF RAM MEM PTR Z40 = $40 ;INPUT VECTOR Z46 = $46 ;FIND/CHANGE CHAR Z52 = $52 ;FUNCTION JMP VECTOR Z5C = $5C ;PTR-A Z5F = $5F ;FAC Z70 = $70 ;CHRGET ENTRY Z76 = $76 ;CHRGOT ENTRY Z77 = $77 ;BUFFER PTR Z79 = $79 ;WEDGE ENTRY Z7C = $7C ;MODE INDICATOR  ING ZAD = $AD ;TMPXR ZB0 = $B0 ;CMD DEV# ZB3 = $B3 ;/,&,] FLAG ZB5 = $B5 ;TMPAR AND ;FC FLAG ZB6 = $B6 ;TMPYR AND ;FC CNTR ZBA = $BA ;TEMP $B0 ZBB = $BB ;TEMP $D2 ZC4 = $C4 ;SCREEN PTR ZC9 = $C9 ;LOAD END ADDR ZD1 = $D1 ;FILE NAME LENGTH ZD2 = $D2 ;CURRE*=$7000 ;MAIN ENTRY ; ;--- SYS 7*4096 ACTIVATION ENTRY --- ; ENT00 JMP STAR00 ;SET WEDGE ENT01 JMP KILLPG ;PRG-DEACTIVATE ENT02 JMP STAR00 ;RESERVE U1 ENT03 JMP STAR00 ;RESERVE U2 TESBYT .BYT $F3; ACTIVATE TEST ; ;------- SET WEDGE -------- ; STAR00 LDX OT LDA #COL2 ;80 COL STA COL STAR04 JSR KILL01 ;REMOVE ALL WEDGES ; LDX #OLDZ70-TABL01 ;SET NEW WEDGE $79-$87 STAR01 LDA TABL01,X STA Z79,X DEX BPL STAR01 ;NOT DONE ; LDA #$08 ;DEFAULT DEV # STA TMPDVN ;DEFAULT DEV # ; ;---- PROTECT TOP OF MEMORYR LDX #$F2 ;ACTIV FLAG STX TESBYT LDX Z77+1 ;CHECK TEXT BUFFER CPX #>Z200 ;$02XX ? BNE RESTAX ;NO ; LDX Z77 ;$0200 ? BNE RESTAX ;NO ; TSX ;TEST IF $B40D(4.0)CALL LDA Z100+2,X ;OR $C399 (2.0) CMP RC399+2 ;$A48C=C64 REF BEQ CKLIST ;YES-IMMED MOD ;--- CHECK FOR BATPRO COMMAND --- ; CKLIST JSR RESTAX ;GET NEXT CHAR BCS CKLIS1 ;NOT A # ; JMP NEWLIN ;# -> INSTALL LINE ; CKLIS1 STY ZB6 ;SAVE YR LDX #$00 STX Z80+1 ;QUOTE MODE FLAG STX Z05 ;INIT INDEX CTR CKLIS2 LDY Z77 CKLIS3 LDA Z200,Y ;2ND - 3 ND OF LIST EXIT ; CKLIS5 INX ;A MATCH INY BNE CKLIS3 ;TRY ANOTHER CHAR ; CKLIS6 STY Z77 ;SAVE YR LDA Z05 ;UPDATED XR ASL A TAX LDA JMPTBL+1,X ;JMP ADDR -> STACK PHA LDA JMPTBL,X PHA JSR RESTYR ;RESTORE Y, X, A CHRENT JMP Z70 ;NEXT CHAR ; ; ;--- RESTORE NORMAL IRQ --- ; IRQNRM SEI LDA RE62E+1 ;ORIGINAL IRQ VECTOR STA Z90 LDA RE62E+2 STA Z90+1 CLI RTS ; ;--- NEW IRQ ROUTINE --- ; IRQVEC LDA Z100+5,X CMP RF8E6+1 ;WAIT ? BNE IRQV01 ;NO... LDA Z100+6,X CMP RF8E6+2 ;WAIT ? BNE IRQV01 ;NO.PET TOP OF SCRN $8000 BOT1 = $83 ;$83FF(40 COL) BOT2 = $87 ;$87FF(80 COL) COL1 = $D8 ;-40 COL SCREEN LINE COL2 = $B0 ;-80 COL SCREEN LINE ; R83FF = $83FF ;BOT OF 40 COL SCR R87FF = $87FF ;BOT OF 80 COL SCR RE84C = $E84C ;59468 SCREEN CASE RFFC6 = $FFC6 ;PTR Z0D = $0D ;OUTPUT SUPPRESS FLAG Z11 = $11 ;LINE # BUFFER PTR Z1F = $1F ;# TRANSFER PTR Z21 = $21 ;INDEX PTR Z28 = $28 ;SOB-START OF BASIC PTR Z2A = $2A ;EOB/SOV-END OF BASIC PTR Z2E = $2E ;STRING LENGTH Z30 = $30 ;BOS-BOTTOM OF STRINGS PTR Z34 = $34 Z80 = $80 ;TEMP FLAGS Z82 = $82 ;TEMP PTR-AUTO INC Z84 = $84 ;TEMP PTR Z86 = $86 ;TEMP PTR Z90 = $90 ;IRQ-VECTOR Z96 = $96 ;'ST' STATUS VAR Z97 = $97 ;DEPRESSED KEY Z9D = $9D ;LOAD(0)/VERIFY(1) FLAG Z9E = $9E ;# OF KBD CHAR IN BUFFR ZA8 = $A8 ;CURSOR-TIMNT LOG FILE# ZD3 = $D3 ;CURRENT SEC-ADR ZD4 = $D4 ;CURRENT DEV# ZDA = $DA ;FILE NAME ADDR-L,H ZFB = $FB ;SAVE END ADDR ; ;WORKING RAM REFERENCES ; Z100 = $0100 ;STACK REF Z200 = $0200 ;BASIC INPUT BUFFER (80 MAX) Z26E = $026E ;KEYBOARD BUFFER (10 MAX) ; RFFFE CPX #$1B ;2.0 ROM ? BEQ STAR04 ;NO CHANGE ; LDX #EN40-RC377X ;4.0 ROM STAR05 LDA RC377X,X ;MOVE JMP TABLE STA RC377,X DEX BNE STAR05 ;NOT DONE ; STX R87FF ;SCREEN CPX R83FF ;40 COL ? BEQ STAR04 ;YES... ; LDA #BOT2 ;$8377=BOT SCREEN STA B ---- ; LDX #ENT00 CPX Z34 ;HIMEM ADDR TYA SBC Z34+1 BCS STAR03 ;HIMEM=OK ; STX Z34 ;HIMEM ADDR STY Z34+1 STAR03 JMP MENU01 ;DISPLAY MENU EXIT ; ; ;---- CHRGET ENTRY $0079 ---- ; ENTRY1 STA ZB5 ;SAVE AR STX ZAD ;SAVE XE BNE RESTAX ;NO ; RESTYR LDY ZB6 ;RESTORE YR RESTAX LDX ZAD ; XR LDA ZB5 ; AR CMP #$3A ;CHRGET # TEST BCC ENTRY2 RTS ; ;---CHRGET ENTRY $7D--- ; ENTRY2 CMP #$20 ;IGNORE SPACES BEQ CHRENT ;NEXT CHAR ; JMP OLDZ81 ;FINISH CHRGOT TEST ;RD CHR SCAN EOR TABL02,X BEQ CKLIS5 ;A MATCH ; CMP #$80 ;FINAL MATCH TEST BEQ CKLIS6 ;OK INSTALL IT ; INC Z05 ;UPDATE INDEX CKLIS4 INX LDA TABL02-1,X BPL CKLIS4 ;MOVE TO JMPTABLE ADDR ; LDA TABL02,X BNE CKLIS2 ;TRY ANOTHER COMMAND BEQ RESTYR ;E TA ZFB+1 LDA Z80 ;TYPE LOAD BNE DISOPJ ;NOT REL LOAD ; LDX Z28 ;SOB LDY Z28+1 BNE DISOPK ;ALWAYS ; DISOPJ CMP #'$' BNE DISOPY ;ABS LOAD ; LDX Z86 ;SPECIFIED ADDR LDY Z86+1 DISOPK STX ZFB STY ZFB+1 DISOPY LDA ZB3 CMP #'&' BNE DISOPL ;NOT APPEND .. ; JSR RFC7B ;INIT I/O IRQV01 LDA Z97 ;KEY DEPRESSED CMP #255 ;ANY KEY ? BEQ IRQV02 ;NO... ; CMP IRQ000 ;SAME KEY ? BEQ IRQV03 ;YES ; IRQV02 STA IRQ000 ;NEW KEY LDA #$10 STA IRQ001 ;TIMER 1 IRQJMP JMP RE62E ;REMAINDER OF IRQ ; IRQV03 LDA Z90+1  N JSR RF355 ;LOAD FILE JSR DISADR ;DISPLAY ADDR JSR HEXOST ;PRINT 'ST=XX' LDA Z96 ;ST AND #$BF BEQ DISOPF ;ST=OK ; DISOP7 LDA Z9D BNE DISOP4 ;VERIFY ERROR ; LDY #$00 STY Z9E ;KBD CHAR CNT=0 LDY #$60 ;LOAD ERROR .BYT $2C ;SKIP NEXT INSTR DISOP4  AYS... ; ; ;--- LOAD OR VERIFY -- ; LOAD00 LDA #'/' .BYT $2C ;SKIP NEXT INSTR LRUN00 LDA #'^' .BYT $2C ;SKIP NEXT INSTR VERF00 LDA #']' .BYT $2C ;SKIP NEXT INSTR APPEN0 LDA #'&' STA ZB3 ;DISK OPERATION CMP #$5D ;VERIFY ? BNE DISOP1 ;NO ; LDA #$01  BEQ DISOP6 ;YES...LOAD/RUN ; JMP MODED1 ;DISPLAY MODE ; DISOP6 JSR RC5A7 ;SETUP-RUN JMP RC6C4 ;EXECUTE RUN ; ; ;--- PARSE SAVE FILENAME --- ; PRSE02 INC ZD1 INC ZD1 ;NEW FILE NAME LENGTH JSR Z76 PRSE05 JSR RFFD2 ;DISPLAY FILENAME JSR Z70 ;PARSE CO...OK ; DISOPB JMP OOPS01 ;OOPS-ERROR ; DISOP9 JMP GETF01 ;TEXT ; ;--- LOAD/VERIFY/APPEND PRG FILES --- ; DISOP3 LDA #$60 JSR OPEN01 ;OPEN FILE JSR INCHAR ;TEST IF THERE JSR RFFCC ;DEFAULT I/O LDA ZD2 ;FILE # JSR RF2AE ;CLOSE IT DISOPD JSR Z70 ;NEEN THE FILE ; ;-- SEND DISK COMMAND -- ; DISC00 LDA TMPDVN STA ZD4 ;DEV # LDA #$6F ;SEC ADDR 15 STA ZD3 JSR RF0BA ;SEND 'LISTEN' LDA ZD3 JSR RF128 ;SEND SEC ADDR LDY #$00 DISC01 LDA (Z77),Y BEQ DISC02 ;EOL ; JSR RF16F ;SEND CHAR INY BNE DISC01JMP RCE03 ;SYNTAX ERROR ; DISOPG CMP #$00 BNE DISOPD ;NOT EOL ; DISOPM LDA #$60 STA ZD3 JSR RF40A ;SEARCHING JSR RF466 ;OPEN JSR RF0B6 ;SEND DEV TLK LDA ZD3 ;SEC ADR JSR RF128 ;SEND SEC ADR JSR RF18C ;GET ADDR-L STA ZFB JSR RF18C ;GET ADDR-H S F18C ;READ 1ST CHAR STA Z5F JSR RF18C ;READ 2ND CHAR STA Z5F+1 CMP #$30 ;2ND CHAR=0 ? BNE DCERR2 ;NO CMP Z5F ;1ST CHAR=0 ? BEQ DCERR3 ;YES..BOTH ZERO ; DCERR2 JSR SUPOFF ;SUPPRESS FLAG=OFF DCERR3 LDA Z5F JSR RCA45X ;PRINT IF NO SUPRESS LDA Z5F+1  DCERR4 JSR RCA45X CMP #$0D ;RET ? BEQ DCERR5 ;END OF MESSAGE ; JSR RF18C ;NEXT CHAR BNE DCERR4 ;ALWAYS DCERR5 JSR RF17F ;SEND 'UNTALK' SUPOFF BIT Z0D ;SUPPRESS FLAG OFF ? BPL DCERR6 ;NO ; JSR SUPR00 ;TURN IT OFF DCERR6 RTS ; ; ;-- DR PARAMETER TES ; SEC ;FIX APPEND ADDR LDA Z2A SBC #$02 STA ZFB ;LOAD START ADDR LDA Z2A+1 SBC #$00 STA ZFB+1 JSR DISADR ;DISPLAY ADDR LDX #APPMSG-MES00 LDY #HEXMSG-APPMSG JSR PMESS JMP DISOPN ; DISOPL JSR DISADR ;DISPLAY ADDR JSR RF42E ;LOAD/VER MSG DISOPCMP RE62E+2 ;ORIG IRQ ? BEQ IRQJMP ;YES ; LDA IRQ001 ;TIMER 1 BEQ IRQV04 ;RAN OUT ; DEC IRQ001 BNE IRQJMP IRQV04 DEC IRQ002 ;TIMER 2 BNE IRQJMP ; LDA #$04 STA IRQ002 ;TIMER 2 LDA #$00 STA Z97 ;NO-KEY DEPRESSED LDA #$02 STA ZA8 BNE IRQJMP ALWLDY #$6E ;VERIFY ERROR JMP RF570 ;PRINT ERROR ; DISOPF LDA #$0D ;RET JSR RFFD2 LDA Z80 ;REL LOAD ? BNE DISOP8 ;NO.. ; LDA ZC9 ;FIX END OF BASIC STA Z2A LDA ZC9+1 STA Z2A+1 DISOP8 JSR RC572 ;FIX POINTERS JSR RC442 ;FIX CHAINING LDA ZB3 CMP #'^';VERIFY FLAG .BYT $2C ;SKIP NEXT INSTR DISOP1 LDA #$00 ;LOAD FLAG STA Z9D JSR DPARS1 ;GET INPUT PARAM LDY ZD1 ;LEN>0 ? BNE DISOP2 ;OK ; JMP RCE03 ;SYNTAX ERROR ; DISOP2 LDA Z7C BPL DISOP3 ;BASIC PRG ; LDA ZB3 CMP #'^' ;LOAD-RUN ? BNE DISOP9 ;NOMMAND CMP #$00 ;EOL ONLY BEQ PRSE06 ;':' OR EOL ; CMP #',' ;DELIMITER ? BNE PRSE05 ;NO ': ,' OR EOL ; JSR RCDF8 ;VERIFY COMMA ($F516 ALSO) PRSE06 JSR Z76 ;REGET CHAR JSR RNGE02 ;SET LINE RANGE LDA #$0D ;RET JSR RFFD2 LDA #$6E ;14 JMP OPEN00 ;OPXT CHAR CMP #',' BNE DISOPG ;NO... ; LDA ZB3 CMP #'^' BEQ DISOPH ;ERROR ; CMP #'&' BEQ DISOPH ;ERROR ; JSR Z70 ;NEXT CHAR CMP #'$' ;HEX LOAD ? BNE DISOPM ;NO...ABS LOAD ; JSR HEXBYT ;START ADDR IN Z86 BCS DISOPM ;OK...SPECIFIED LOAD ; DISOPH  ;ALWAYS ; DISC02 JSR RF183 ;'UNLISTEN' ; ;-- READ ERROR CHANNEL -- ; DCERR0 JSR SUPR00 ;TOGGLE SUPRESS FLAG ;-- PRINT ALL ERROR CODES -- ; LDA TMPDVN STA ZD4 ;DEV # JSR RF0B6 ;SEND 'TALK' LDA #$6F STA ZD3 ;ERR-CH 15 JSR RF128 ;SEND SEC ADDR JSR R DA Z200,X ;GET CHR CMP #$30 ;IS CHR < '0' ? BCC CMPK05 ;YES... END OF LINE # ; CMP #$3A ;IS CHR > '9' ? BCC CMPK03 ;NO...NEXT LINE # CHR ; CMPK05 LDA Z200,X ;NEXT CHAR CMP #$20 ;SPACE ? BNE CMPK06 ;NO... ; INX ;KEEP IT CMPK06 LDA Z200,X ;COMPRESS T ON SAVE -- ; SAVTST LDY #$00 LDA (Z77),Y CMP #'@' ;REPLACE BNE SAVT01 ;NO ; INY LDA (Z77),Y SAVT01 AND #$FE CMP #$30 ;DR 0 OR 1 ? BEQ SAVT02 ;YES ; SAVT03 JMP RCE03 ;SYNTAX ERROR ; SAVT02 JSR DPARS1 ;PARSE FILENAME LDX #SAVMSG-MES00 LDY #POSMS AX : ;EU ; ;ED ; WIPU01 LDX #TOP ;$8000 LDA #$00 BEQ ERAS00 ; WIPD01 LDX BOT ;$83FF OR $87FF LDA #$FF ERAS00 STA Z86 STX Z86+1 LDA ZC4 ;Z84=ZC4 STA Z84 LDA ZC4+1 STA Z84+1 BIT Z86 ;UP OR DOWN ? BMI ERAS02 ;DWN ; LDA #$FF ;-1 JSR Z84MA R Z70 ;NEXT CHAR CMP #$00 BEQ SAVE05 ;BASIC SAVE ; CMP #',' ;END OF NAME ? BNE SAVE14 ;NO... ; JSR Z70 ;NEW PARAM CMP #'$' ;ML SAVE ? BNE SAVT03 ;NO...ERROR ; JSR HEXADR ;GET STRT/END ADDR BCC SAVT03 ;ERROR ; LDA Z84 ;START ADDR STA ZFB LDA Z PAR ;Z84=Z84+1 LDA Z86+1 LDY Z86 CPY Z84 SBC Z84+1 BCS ERAS01 ;Z86 >= Z84 ; RC392X PLA ;Z86 < Z84 PLA JMP RC392 ;WARM START & EXIT ; ; ;--- ASCII ADDR CONVERSION (X,A) --- ; ASC004 JSR ASC002 ;2 CHAR CONV BCC ASC104 ;ERROR ; STA ZB6 ;MS JSR ASC0  ;RESTORE REG JSR RC873 ;GET LINE # INTO Z11 BEQ NLIN04 ;LINE # ONLY ; NLIN05 LDA Z82 ;IN AUTO MODE ? ORA Z82+1 BEQ NLIN04 ;NO ; LDA Z11 ;LINE # FOR NEXT LINE CLC ADC Z82 STA Z5F+1 LDA Z11+1 ADC Z82+1 STA Z5F LDX #$90 ;CONVERT TO DEC SEC JS Y' RC399 JMP $C399 ;IMMED MODE REF CALL RC3AE JMP $C3AE ;TOKENIZE LINE AND INSERT IT RC3B1 JMP $C3B1 ;INSERT LINE INTO SOU;RCE RC442 JMP $C442 ;FIX CHAINING AFTER INS/DEL RC52C JMP $C52C ;NEXT LINE SEARCH RC572 JMP $C572 ;SET COLD START PTRS RC5A7 JMP $C OL ? BEQ NLIN05 ;':' ; LDX Z7C ;TEXT MODE ? BMI CMPK01 ;YES ; JMP RC3AE ;TOKENIZE BASIC LINE ; ;---- SQUISH TEXT LINE ---- ; CMPK01 LDX #$FF LDY #$00 CMPK02 INX LDA Z200,X ;SKIP SPACES CMP #$20 BEQ CMPK02 BNE CMPK04 ;(=JMP) ; CMPK03 INX CMPK04 L JMP $E62E ;IRQ JMP VECTOR RF0B6 JMP $F0B6 ;SEND IEEE 'TALK' RF0BA JMP $F0BA ;SEND IEEE 'LISTEN' RF128 JMP $F128 ;SEND IEEE 'SEC ADDR' RF16F JMP $F16F ;SEND IEEE 'CHARACTER' RF17F JMP $F17F ;SEND IEEE 'UNTALK' RF183 JMP $F183 ;SEND IEEE 'UNLISTEN' RF18C !JMP $F18C ;IEEE INPUT ADDR RF2AE JMP $F2AE ;CLOSE LOG FILE IN AR RF301 JMP $F301 ;TEST STOP KEY RF355 JMP $F355 ;INPUT PRG RF40A JMP $F40A ;'SEARCHING' RF42E JMP $F42E ;'LOADING' OR 'VERIFYING' RF466 JMP $F466 ;OPEN PRG FILE RF524 JMP $F524 ;OPEN IEEE FI BUFF BEQ CMPK07 ;END OF LINE ; STA Z200,Y INX INY BNE CMPK06 ;BRANCH ALWAYS ; CMPK07 STA Z200,Y ;FIX FAKE LINK INY INY STA Z200,Y INY INY INY JMP RC3B1 ;INSTALL LINE ; ; ;--- ERASE SCREEN UP OR DOWN --- ;FROM THE PRESENT CURSOR POSITION ;SYNT G-SAVMSG JMP PMESS ; ; ;-- SAVE PRG OR TEXT FILES -- ; SAVE00 JSR SAVTST ;SAVE PARAM LDA Z7C ;TEXT ? BPL SAVE04 ;NO... ; JMP PUTF01 ;SAVE TEXT ; ; ;--- SAVE PRG FILE --- ; SAVE04 JSR RF68D ;ZC9_Z2A ZFB_Z28 LDA #$61 STA ZD3 ;SAVE SEC ADDR SAVE14 JS R ;Z84=Z84-AR LDX #$01 ;SWAP Z86 & Z84 ERAS04 LDA Z84,X PHA LDA Z86,X STA Z84,X PLA STA Z86,X DEX BPL ERAS04 BMI ERAS01 ;ALWAYS ; ERAS02 LDA COL ;-40 OR -80 JSR Z84MAR ;Z84=Z84-AR ERAS01 LDX #$00 LDA #$20 ;SPACE STA (Z84,X) LDA #$01 JSR Z84 84+1 STA ZFB+1 LDA Z86 ;END ADDR STA ZC9 LDA Z86+1 STA ZC9+1 SAVE05 LDA #$F3 ;DEACT FLAG STA TESBYT JSR RF6BE ;SAVE BASIC PRG JMP DISBRK ;READ ERROR CH EXIT ; ; ;-- INSTALL A NEW NUMBERED LINE -- ; NEWLIN NLIN01 PLA ;BACKUP-1 JSR PLA JSR RESTAX 02 ;2 CHAR CONV TAX ;LS LDA ZB6 ;MS ASC104 RTS ;C=1 ON EXIT IF OK ; ; ;--- PET BASIC 2.0 CONVERSION TABLE --- ; BOT .BYT BOT1 ;BOT OF SCRN $83FF COL .BYT COL1 ;$D8 ;40 COL SCREEN ; RC377 JMP $C377 ;RESTORE DATA PTRS RC392 JMP $C392 ;WARM START W/0'READ R RDB55 ;FLOAT IT JSR RDCE9 ;MAKE ASCII # LDX #$00 ;PUT ASCII # IN KEYB NLIN02 LDA Z100,X BEQ NLIN03 ;DONE ; STA Z26E+1,X INX BNE NLIN02 ;BRANCH ALWAYS ; NLIN03 LDA #$20 ;EXTRA SPACE STA Z26E+1,X INX STX Z9E ;#CHRS IN KBD BUFF NLIN04 CMP #$3A ;E 5A7 ;'RUN' SETUP RC6C4 JMP $C6C4 ;GOTO 'RUN' RC873 JMP $C873 ;ASCII# TO FIXPT IN $11,12 RCDF8 JMP $CDF8 ;CHECK FOR COMMA RCE03 JMP $CE03 ;'SYNTAX ERROR' RDB55 JMP $DB55 ;FIX TO FLT PT RDCD9 JMP $DCD9 ;CONV FIX PT # RDCE9 JMP $DCE9 ;ASCII# TO STRING RE62E! C001 ;OK ; ASC102 JSR RFFCC ;DEFAULT I/O JMP RCE03 ;SYNTAX ERROR ; ASC001 JSR ASCHEX ;CONVERT TO HEX ASL A ASL A ASL A ASL A STA Z100 JSR Z70 ;2ND ASCII CHAR BEQ ASC102 ;ERROR ; JSR ASCHEX ;CONVERT TO HEX ORA Z100 SEC ;OK EXIT RTS ; ; ;- GET ! LE RF570 JMP $F570 ;PRINT ERROR RF68D JMP $F68D ;TRANSFER START/END ADDR RF6BE JMP $F6BE ;TRANSFER START/END ADDRRNG RF8E6 JMP $F8E6 ;I/O WAIT ROUTINE RFC7B JMP $FC7B ;RESTORE IRQ ROUTINE ; ;--- BASIC 4.0 (40/80 COL PET) --- ; RC377X JMP $B3ED ;RESTORE D! - AR --- ; Z84MAR DEC Z84+1 ; ;--- Z84 = Z84 + AR --- ; Z84PAR CLC ADC Z84 STA Z84 BCC Z84X00 INC Z84+1 Z84X00 RTS ; ;--- SET BASIC MODE --- ;SYNTAX : ;MB ; MODEB1 LDA #$00 LDX #BASMSG-MES00 LDY #APPMSG-BASMSG BNE MODE02 ;ALWAYS ; ;--- SET TEXT MO! H RC572X JMP $B5E9 ;SET COLD START PTRS RC5A7X JMP $B622 ;'RUN' SETUP RC6C4X JMP $B74A ;GOTO 'RUN' RC873X JMP $B8F6 ;ASCII# TO FIXPT IN $11,12 RCDF8X JMP $BEF5 ;CHECK FOR COMMA RCE03X JMP $BF00 ;'SYNTAX ERROR' RDB55X JMP $CD7F ;FIX TO FLT PT RDCD9X JMP $!COMMAND -- ; BASC01 LDX Z7C BPL OOPS01 ;ERROR-BASIC MODE RTS ; ;--- TEST RUN COMMAND --- ;PRINT OOPS IF IN TEXT MODE ; RUNC01 LDA Z7C BMI OOPS01 ;ERROR-TEXT MODE ; JSR AUTOFF ;AUTO=OFF LDX #$FF STX ZB5 ;TMPAR (CHRGET) INX STX Z77 ;BACKUP SCAN PTR!E ;SEND IEEE 'UNTALK' RF183X JMP $F1B9 ;SEND IEEE 'UNLISTEN' RF18CX JMP $F1C0 ;IEEE INPUT ADDR RF2AEX JMP $F2E2 ;CLOSE LOG FILE IN AR RF301X JMP $F335 ;TEST STOP KEY RF355X JMP $F38F ;INPUT PRG RF40AX JMP $F449 ;'SEARCHING' RF42EX JMP $F46D ;'LOADING' OR!A ; ;--- PRINT HEX VAL --- ; DISHEX PHA ;SAVE AR LSR A LSR A LSR A LSR A JSR ASCONV ;CONVERT TO ASCII TAX PLA AND #$0F ;STRIP RH JSR ASCONV ;CONVERT TO ASCII PHA TXA JSR RFFD2 ;PRINT ASCII-L PLA JMP RFFD2 ;PRINT ASCII-R ; ; ;--- CONVERT AR 9RQ ROUTINE EN40 ;END OF MOVE TABLE ; .FIL DFH.ED.COM-S1 TEN' RF18CX JMP $F1C0 ;IEEE INPUT ADDR RF2AEX JMP $F2E2 ;CLOSE LOG FILE IN AR RF301X JMP $F335 ;TEST STOP KEY RF355X JMP $F38F ;INPUT PRG RF40AX JMP $F449 ;'SEARCHING' RF42EX JMP $F46D ;'LOADING' OR!PR01 ;SUPPR ; JMP RFFD2 ;PRINT IT ; ; ;--- ASCII TO HEX CONVERSION --- ; ASCHEX CMP #$3A PHP AND #$0F PLP BCC ASCHE1 ;0-9 ADC #$08 ;A-F ASCHE1 RTS ; ; ;--- CONVERT 2 ASCII BYTES TO HEX -- ; ASC002 LDA #$00 STA Z100 JSR Z70 ;GET ASCII CHAR BNE AS"START AND END ADDR IN Z84 AND Z86 - ; HEXADR JSR ASC004 ;GET START ADDR BCC ASC102 ;ERROR ; STA Z84+1 ;START ADDR STX Z84 INC Z77 ;SKIP NEXT CHAR (,-,$ SP) BNE HEXBYT INC Z77+1 ; HEXBYT JSR ASC004 ;GET NEXT ADDR BCC ASC102 ;ERROR ; STA Z86+1 ;SAV!PROG BYTE UNNEW2 LDA (Z28),Y BEQ UNNEW5 ;EOL INY BNE UNNEW2 ;TRY 250 CHAR ; JMP RC377 ;ERROR EXIT ; UNNEW5 TYA ;UPDATE LINK LDY #$00 CLC ADC Z28 STA (Z28),Y LDA #$00 ADC Z28+1 INY STA (Z28),Y JMP DLET04 ;FIX CHAINING EXIT ; ; ;--- Z84 = Z84 !ATA PTRS RC392Y JMP $B406 ;WARM START W/0'READY' RC399X JMP $B40D ;IMMED MODE REF CALL RC3AEX JMP $B422 ;TOKENIZE LINE AND INSERT IT RC3B1X JMP $B425 ;INSERT LINE INTO SOU;RCE RC442X JMP $B4B6 ;FIX CHAINING AFTER INS/DEL RC52CX JMP $B5A3 ;NEXT LINE SEARC!DE --- ;SYNTAX : ;MT ; MODET1 LDA #$80 LDX #TXTMSG-MES00 LDY #BASMSG-TXTMSG MODE02 STA Z7C JSR PMESS JMP RC392X ;WARM START ; ; ;--- DISPLAY MODE AND EXIT --- ; MODED1 LDA Z7C BMI MODET1 ;TEXT MODE BPL MODEB1 ;BASIC MODE ; ; ;-- TEST IF VALID TEXT !CF83 ;CONV FIX PT # RDCE9X JMP $CF93 ;ASCII# TO STRING RE62EX JMP $E455 ;IRQ JMP VECTOR RF0B6X JMP $F0D2 ;SEND IEEE 'TALK' RF0BAX JMP $F0D5 ;SEND IEEE 'LISTEN' RF128X JMP $F143 ;SEND IEEE 'SEC ADDR' RF16FX JMP $F19E ;SEND IEEE 'CHARACTER' RF17FX JMP $F1A! JMP RESTAX ;OK-EXECUTE RUN ; OOPS01 LDX #OOPMSG-MES00 LDY #TXTMSG-OOPMSG JSR PMESS JMP MODED1 ;DISPLAY MODE ; ; ;--- DISPLAY HEX ADR --- ; DISADR LDX #HEXMSG-MES00 LDY #ENDMSG-HEXMSG JSR PMESS LDX #$01 LDA ZFB-1,X PHA LDA ZFB,X JSR DISHEX PL! 'VERIFYING' RF466X JMP $F4A5 ;OPEN PRG FILE RF524X JMP $F563 ;OPEN IEEE FILE RF570X JMP $F5AF ;PRINT ERROR RF68DX JMP $F6CC ;TRANSFER START/END ADDR RF6BEX JMP $F6FD ;TRANSFER START/END ADDR RF8E6X JMP $F92B ;I/O WAIT ROUTINE RFC7BX JMP $FCC0 ;RESTORE I!TO ASCII --- ; ASCONV CLC ADC #$F6 BCC ASCON1 ;0-9 ADC #$06 ;A-F ASCON1 ADC #$3A RTS ; ; ;--- TOGGLE PRINT SUPPRESS FLAG --- ; SUPR00 LDA Z0D EOR #$FF ;MINUS=SUPPRESS STA Z0D SUPR01 RTS ; ; ;-- PRINT IF SUPPRESS FLAG OFF -- ; RCA45X BIT Z0D BMI SU"  SAVE "@0:PROOF PET",8#:R"A BASIC PROGRAM PROOFREADER FOR PET/CBM"X:" BY: BLAINE D. STANDAGE 07-15-84" 535 N. WAVERLY, ORANGE, CA. 92667$" (714) 633-1784.:8 "PLEASE WAIT..."B I32512 32686L A:" E-END ADDR STX Z86 ;LOAD-START ADDR RTS ; ; ;--- CHANGE DISK DEV # --- ; SETDVN JSR Z70 ;NEXT CHAR BCS ASC102 ;NOT DEC # ; JSR RC873 ;CONVERT TO HEX LDA Z11 STA TMPDVN DISDVN LDX #POSMSG-MES00 LDY #STMSG-POSMSG JSR PMESS LDX TMPDVN LDA #$00 JS" 119,208,002,230) 120,142,176,127,140,177G 127,104,168,104,170,072e 152,072,224,180,240,013 224,195,240,009,174,176 127,172,177,127,076,118 000,165,119,141,066,127 141,082,127,165,120,141 067,127,141,083,127,17"6,178,127,169,019'd 032,210,255,169,018,032En 210,255,169,058,032,210cx 255,174,175,127,169,000 172,252,255,192,022,240 006,032,217,220,076,154 127,032,131,207,169,032 032,210,255,032,210,255 173,178,127,133,216," CCA: I,A: I%V C23728 1140@` "THERE IS AN ERROR"cj "IN THE DATA STATEMENTS.": t: "PROOFREADER ACTIVATED."~ 52,0: 53,127 32512: : 169,076,133,112,169,013 133,113,169,127,133,114  096,230,eR RDCD9 ;DEC DISPLAY LDA #$20 ;SPACE JSR RFFD2 JSR RFFD2 JMP MODED1 ;DISPLAY MODE EXIT ; ; .END 4+1 ;START ADDR STX Z84 INC Z77 ;SKIP NEXT CHAR (,-,$ SP) BNE HEXBYT INC Z77+1 ; HEXBYT JSR ASC004 ;GET NEXT ADDR BCC ASC102 ;ERROR ; STA Z86+1 ;SAV"3  002,002,201,000,240,2247 201,032,240,220,169,000U 141,175,127,173,002,002s( 201,000,240,022,201,0322 240,007,024,109,175,127< 141,175,127,238,082,127F 208,233,238,083,127,076P 081,127,165,216,141,178 Z 127,20/169  013,032,210,255,076,040!  127240,220,169,000U 141,175,127,173,002,002s( 201,000,240,022,201,0322 240,007,024,109,175,127< 141,175,127,238,082,127F 208,233,238,083,127,076P 081,127,165,216,141,178 Z 127,20